Rumah >pembangunan bahagian belakang >tutorial php >Bagaimanakah PHP Boleh Mengekalkan Ketepatan Apabila Mengira dengan Integer Amat Besar?
Memelihara Ketepatan dalam Pengiraan Nombor Besar dalam PHP
PHP boleh menghadapi isu ketepatan apabila melakukan pengiraan pada integer yang sangat besar. Ini boleh menjadi masalah apabila menggunakan teknik seperti eksponensial modular, seperti dalam Ujian Primaliti Fermat.
Teka-teki apungan
Mendarab dua integer besar boleh menghasilkan nilai yang secara automatik dihantar ke apungan dalam PHP. Ini boleh membawa kepada pengiraan modulus yang salah, seperti yang ditunjukkan di bawah:
$x = 62574 * 62574; var_dump($x); // float(3915505476) ... correct var_dump($x % 104659); // int(-72945) ... incorrect
A Solution
PHP menawarkan dua perpustakaan luaran untuk mengendalikan nombor besar: BC Math dan GMP. GMP menyediakan API yang lebih komprehensif, memastikan ketepatan walaupun untuk nilai yang sangat besar.
Menggunakan GMP
GMP boleh digunakan untuk mewakili nombor ketepatan sewenang-wenangnya. Seperti yang dilihat dalam jawapan yang disediakan, kelas tersuai seperti Decimal2 boleh dibuat untuk memudahkan pengiraan nombor besar dan menyediakan ciri seperti pembundaran dan pengiraan modulus.
// Using the GMP library $bignum = gmp_init('62574'); // Initialize GMP number $product = gmp_mul($bignum, $bignum); // Multiply using GMP $modulus = gmp_mod($product, 104659); // Calculate modulus using GMP echo gmp_strval($modulus); // Output the correct modulus value
Kaedah ini memastikan pengiraan dan pengendalian nombor besar dengan yang diperlukan ketepatan, mengelakkan sebarang potensi kehilangan ketepatan.
Atas ialah kandungan terperinci Bagaimanakah PHP Boleh Mengekalkan Ketepatan Apabila Mengira dengan Integer Amat Besar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!