要使用带有大量数字(100,000+)的Fermat基本性测试时需要的[模幂,它需要进行一些非常大的计算。
当我将两个大数相乘时(例如:62574和62574),PHP似乎将结果强制转换为浮点数。获取该模量的值将返回奇怪的值。
$x = 62574 * 62574; var_dump($x); // float(3915505476) ... correct var_dump($x % 104659); // int(-72945) ... wtf.
有什么方法可以使PHP正确执行这些计算?另外,还有另一种方法可以找到适用于大量数值的模量值吗?
出于某种原因,PHP中有两个处理任意长度/精度数字的标准库:BCMath和GMP。我个人更喜欢GMP,因为它更新鲜且具有更丰富的API。
基于GMP,我实现了Decimal2类来存储和处理货币金额(例如100.25美元)。 大量 的mod计算没有任何问题。经测试具有 非常 大的数字。