特别是在使用大整数的PHP中进行数学运算时遇到麻烦
例如,echo 600851475143 % 3;
打印0,但600851475143不能被3整除
和
100的阶乘是
933262154439441526816992388562667004907159682643816214685929638952175999932299156089414639761565182862536979208272237582511852109168640000000000000000000000
但是当我尝试通过以下代码计算100的阶乘时
$n = 100;
$product = 1;
for($i = 1 ; $i <= $n ; $i++){
$product = $product*$i;
}
$product = sprintf('%f', $product);
结果是
93326215443944102188325606108575267240944254854960571509166910400407995064242937148632694030450512898042989296944474898258737204311236641477561877016501813248.000000
我不确定我哪里写错了,或者它必须对变量的大小做一些事情
有关此错误的一些说明,请参见http://floating-point-gui.de/。
bcmul使用字符串表示数据,并将进行精确的计算:
$n = 100;
$product = 1;
for($i = 1 ; $i <= $n ; $i++){
$product = bcmul($product,$i);
}
print $product;