一尘不染

使用PHP处理大量数字

php

要使用带有大量数字(100,000+)的Fermat基本性测试时需要的[模幂,它需要进行一些非常大的计算。

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

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

有什么方法可以使PHP正确执行这些计算?另外,还有另一种方法可以找到适用于大量数值的模量值吗?


阅读 267

收藏
2020-05-26

共1个答案

一尘不染

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

基于GMP,我实现了Decimal2类来存储和处理货币金额(例如100.25美元)。 大量 的mod计算没有任何问题。经测试具有 非常 大的数字。

2020-05-26