PHP 5、PHP 7中的数学运算精度


Math operations precision in PHP 5, PHP 7

在PHP 5+中开发计算器时,程序员是否可以在不考虑舍入错误和小数表示不精确的情况下获得结果?

我指的是内置的完美方法,例如,以给定的准确性获得结果。

或者像$x = $y * $z + 0.77这样的每个操作都必须在算法中开发额外的检查,比如舍入(以避免错误)?

所以,错误或不精确——是由PHP内置核心决定还是由开发人员决定?PHP 7支持64位,在这个方向上(计算的准确性)有什么改进?

在用PHP5+开发计算器时,程序员能在不考虑舍入错误和小数表示不精确的情况下得到结果吗?

简单的答案是No

像计算机一样使用二进制机器在十进制的基础上进行算术运算,总是会产生某种错误。

这篇文章解释了许多细节,这是一个相当复杂的主题。http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html

来自十进制世界的简单示例:

分数1/3不能用十进制表示法表示为有限浮点数。我们经常通过编写0.333333333...来尝试它,但这并不是100%准确的。

这同样适用于二进制数算法。

[编辑]如果您需要非常高的精度,那么您应该查看phps BC math functionshttp://php.net/manual/en/ref.bc.php

我认为PHP 7中没有任何东西会改变这一点。正如@maxhb所指出的,做浮点运算本质上是不精确的,所以你必须注意舍入误差。

64位功能并没有从根本上改变这一点。