Bagikan melalui


Panjang maksimum BigInteger

.NET 9 memberlakukan panjang BigIntegermaksimum , yaitu dapat berisi tidak lebih dari (2^31) - 1 (sekitar 2,14 miliar) bit. Angka tersebut menunjukkan alokasi hampir 256 MB dan berisi sekitar 646,5 juta digit. Batas baru ini memastikan bahwa semua API yang terekspos berperilaku baik dan konsisten dengan tetap memungkinkan angka yang jauh melampaui sebagian besar skenario penggunaan.

Perilaku sebelumnya

Sebelumnya, Anda dapat menetapkan nilai dengan panjang hingga Array.MaxLength * 32 bit ke BigInteger variabel.

Catatan

Mesin umum akan mencapai jauh OutOfMemoryException sebelum batas ini dapat dicapai.

Perilaku yang baru

Mulai dari .NET 9, BigInteger memiliki panjang (2^31) - 1 maksimum (sekitar 2,14 miliar) bit. Jika Anda mencoba menetapkan nilai yang lebih besar, nilai OverflowException akan dilemparkan saat runtime. Misalnya, kode berikut melemparkan pengecualian:

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

Versi yang diperkenalkan

Pratinjau .NET 9 6

Jenis perubahan yang melanggar

Perubahan ini adalah perubahan perilaku.

Alasan untuk berubah

BigInteger mendukung mewakili nilai bilangan bulat dengan panjang arbitrer pada dasarnya. Namun, dalam praktiknya, panjangnya dibatasi oleh batas komputer yang mendasar, seperti memori yang tersedia atau berapa lama waktu yang diperlukan untuk menghitung ekspresi tertentu. Selain itu, ada beberapa API yang gagal memberikan input yang menghasilkan nilai yang terlalu besar. Untuk alasan ini, panjang maksimum sekarang diberlakukan.

Jika kode Anda terpengaruh, kurangi panjang nilai yang Anda tetapkan BigInteger atau tambahkan pemeriksaan panjang.

API yang Terpengaruh