Udostępnij za pośrednictwem


Maksymalna długość liczby całkowitej biginteger

Platforma .NET 9 wymusza maksymalną długość BigInteger, co oznacza, że może zawierać nie więcej niż (2^31) - 1 (około 2,14 miliarda) bitów. Taka liczba reprezentuje prawie 256 MB alokacji i zawiera około 646,5 miliona cyfr. Ten nowy limit gwarantuje, że wszystkie uwidocznione interfejsy API są dobrze zachowywane i spójne, jednocześnie umożliwiając liczby, które wykraczają daleko poza większość scenariuszy użycia.

Poprzednie zachowanie

Wcześniej można było przypisać wartość o długości do Array.MaxLength * 32 bitów do zmiennej BigInteger .

Uwaga

Typowe maszyny osiągną znacznie przed osiągnięciem OutOfMemoryException tego limitu.

Nowe zachowanie

Począwszy od platformy .NET 9, BigInteger ma maksymalną długość (2^31) - 1 (około 2,14 miliarda) bitów. Jeśli spróbujesz przypisać większą wartość, OverflowException element zostanie zgłoszony w czasie wykonywania. Na przykład następujący kod zgłasza wyjątek:

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

Wprowadzona wersja

.NET 9 (wersja zapoznawcza 6)

Typ zmiany powodującej niezgodność

Ta zmiana jest zmianą behawioralną.

Przyczyna wprowadzenia zmiany

BigInteger program obsługuje reprezentowanie wartości całkowitych o zasadniczo dowolnej długości. Jednak w praktyce długość jest ograniczona przez limity komputera bazowego, takie jak dostępna pamięć lub czas obliczenia danego wyrażenia. Ponadto istnieją pewne interfejsy API, które kończą się niepowodzeniem, biorąc pod uwagę dane wejściowe, które powodują zbyt dużą wartość. Z tych powodów maksymalna długość jest teraz wymuszana.

Jeśli twój kod ma wpływ, zmniejsz długość przypisywanej BigInteger wartości lub dodaj sprawdzanie długości.

Dotyczy interfejsów API