Maximální délka bigInteger

.NET 9 vynucuje maximální délku BigInteger, což znamená, že nesmí obsahovat více než (2^31) - 1 (přibližně 2,14 miliardy bitů). Takové číslo představuje téměř 256 MB přidělení a obsahuje přibližně 646,5 milionu číslic. Tento nový limit zajišťuje, že se všechna vystavená rozhraní API dobře chovají a konzistentně a zároveň umožňují čísla, která jsou daleko nad rámec většiny scénářů použití.

Předchozí chování

Dříve můžete k proměnné přiřadit hodnotu s délkou až do Array.MaxLength * 32 bitů BigInteger .

Poznámka:

Typické počítače by narazily OutOfMemoryException daleko před dosažením tohoto limitu.

Nové chování

Počínaje verzí .NET 9 BigInteger má maximální délku (2^31) - 1 (přibližně 2,14 miliardy bitů). Pokud se pokusíte přiřadit větší hodnotu, za běhu programu se vyvolá OverflowException. Například následující kód vyvolá výjimku:

BigInteger bigInt = new BigInteger(-1) << int.MaxValue;

Zavedená verze

.NET 9 Preview 6

Typ zásadní změny

Tato změna je změna chování.

Důvod změny

BigInteger podporuje reprezentaci celočíselné hodnoty v podstatě libovolné délky. V praxi je však délka omezena omezeními základního počítače, jako je dostupná paměť nebo jak dlouho by výpočet daného výrazu trvalo. Kromě toho existují některá rozhraní API, která selžou vzhledem ke vstupům, které vedou k příliš velké hodnotě. Z těchto důvodů se teď vynucuje maximální délka.

Pokud je váš kód ovlivněný, snižte délku hodnoty, ke BigInteger které přiřazujete, nebo přidejte kontrolu délky.

Ovlivněná rozhraní API