在 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中文网其他相关文章!