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

问题描述 投票:0回答:2

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

我的意思是内置的完美方法来获得给定精度的结果。

或者像

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

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

php math precision
2个回答
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
投票

我认为

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

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

© www.soinside.com 2019 - 2024. All rights reserved.