【问题标题】:Math operations precision in PHP 5, PHP 7PHP 5、PHP 7 中的数学运算精度
【发布时间】:2016-01-01 20:58:11
【问题描述】:

在 PHP 5+ 中开发计算器时,程序员能否在不考虑四舍五入错误和十进制表示不精确的情况下得到结果?

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

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

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

【问题讨论】:

    标签: php math precision core


    【解决方案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

    【讨论】:

    • 谢谢。我尝试使用 BC Math 进行整数计算。假设我们要准确知道所有输入数据(整数或实数)。在使用所有数学函数时,BC Math 是在 PHP 中以最小错误获得结果的最佳方法吗?如果我们使用 BC Math,我们能否得到 N 位为真的保证结果?
    【解决方案2】:

    我认为PHP 7 中的任何内容都不会改变这一点。正如@maxhb 指出的那样,进行浮点运算本质上是不精确的,因此您必须注意舍入误差。

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

    【讨论】:

      猜你喜欢
      • 2011-10-21
      • 2010-11-20
      • 2013-10-05
      • 2012-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多