在 PHP 中保持大數計算的精確度
PHP 在對極大整數執行計算時可能會遇到精確度問題。當使用諸如費馬素性測試中的模冪等技術時,這可能會成為問題。
浮點難題
將兩個大整數相乘可能會得到一個值在 PHP 中自動轉換為浮點數。這可能會導致模數計算不正確,如下所示:
$x = 62574 * 62574; var_dump($x); // float(3915505476) ... correct var_dump($x % 104659); // int(-72945) ... incorrect
解
PHP 提供了兩個外部函式庫來處理大數:BC Math 和GMP。 GMP 提供了更全面的 API,即使對於非常大的值也能確保精度。
使用 GMP
GMP 可用來表示任意精確度的數字。如所提供的答案中所示,可以創建像 Decimal2 這樣的自訂類別來促進大數計算,並提供舍入和模數計算等功能。
// 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
此方法確保使用必要的計算和處理大數精度,evitando 任何潛在的準確性損失。
以上是PHP 在計算極大整數時如何保持精確度?的詳細內容。更多資訊請關注PHP中文網其他相關文章!