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

时间:2016-01-01 20:58:12

标签: php math precision core

在PHP 5+中开发计算器时,程序员可以在不考虑舍入误差和十进制数表示不精确的情况下得到结果吗?

我指的是内置的完美方式,例如,获得准确的结果。

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

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

2 个答案:

答案 0 :(得分:1)

  

在PHP 5+中开发计算器时,程序员可以在不考虑舍入误差和十进制数表示不精确的情况下得到结果吗?

简单回答是No

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

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

十进制世界的简单示例:

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

同样适用于二进制数算术。

[编辑] 如果你需要非常高的精确度,你应该看看phps BC math functions http://php.net/manual/en/ref.bc.php

答案 1 :(得分:1)

我认为PHP 7中的任何内容都会改变这一点。 AS @maxhb指出,做浮点运算本质上是不精确的,所以你必须要考虑舍入误差。

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