在 PHP 中使用大数字

2022-08-30 09:34:30

要像使用大数(100,000+)的费马素数检验时那样使用模块化幂,它需要一些非常大的计算。

当我将两个大数字(例如:62574和62574)相乘时,PHP似乎将结果转换为浮点数。获取 该的模数值将返回奇怪的值。

$x = 62574 * 62574;
var_dump($x);          // float(3915505476) ... correct
var_dump($x % 104659); // int(-72945)  ... wtf.

有没有办法让PHP正确地执行这些计算?或者,是否有另一种方法可以查找适用于大数的模量值?


答案 1

出于某种原因,PHP中有两个标准库处理任意长度/精度数字:BC MathGMP。我个人更喜欢GMP,因为它更新鲜,API更丰富。

基于GMP,我实现了Decimal2类来存储和处理货币金额(如100.25美元)。那里有很多mod计算,没有任何问题。使用非常大的数字进行测试。


答案 2

使用这个

 $num1 = "123456789012345678901234567890";
 $num2 = "9876543210";
 $r    = mysql_query("Select @sum:=$num1 + $num2");
 $sumR = mysql_fetch_row($r);
 $sum  = $sumR[0];

推荐