次の方法で共有


BigInteger の最大長

.NET 9 では、最大長 BigInteger が適用されます。つまり、(2^31) - 1 (約 21 億 4000 万) ビット以下しか含めることができません。 このような数値は、ほぼ 256 MB の割り当てを表し、約 6 億 4,650 万桁を含みます。 この新しい制限により、公開されているすべての API が適切に動作し、一貫性を保ちながら、ほとんどの使用シナリオをはるかに超える数値が引き続き許可されます。

以前の動作

以前は、Array.MaxLength * 32 ビットまでの長さの値を BigInteger 変数に割り当てることができました。

Note

一般的なマシンは、この制限に達するはるか前に OutOfMemoryException に達します。

新しい動作

.NET 9 以降では、BigInteger の最大長は (2^31) - 1 (約 21 億 4000 万) ビットです。 より大きな値を割り当てようとすると、実行時に OverflowException がスローされます。 たとえば、次のコードでは例外がスローされます。

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

導入されたバージョン

.NET 9 Preview 6

破壊的変更の種類

この変更は、動作変更です。

変更理由

BigInteger は、基本的に任意の長さの整数値を表現できます。 ただし、実際には、使用可能なメモリや特定の式の計算にかかる時間など、基になるコンピューターの制限によって長さが制限されます。 さらに、一部の API では、指定された入力に失敗した結果、値が大きくなりすぎる場合があります。 このような理由から、最大長が適用されるようになりました。

コードが影響を受ける場合は、BigInteger に割り当てる値の長さを減らすか、長さチェックを追加します。

影響を受ける API