1

我最近在调试一个程序,该程序始终返回错误,只差几个小数点。事实证明,错误就在我认为我不需要检查的那一行:999999 * (.18 / 12)

我知道括号不是必需的,因为从数学上讲,无论它们是否存在,表达式都应该评估为相同的答案,但我只是为了清楚起见将它们包括在内。然而,当我将语句输入 Python 解释器时,它返回14999.98499999999了 ,而正确的答案应该是14999.985. 当我删除括号并输入999999 * .18 / 12时,我得到了正确答案 ( 14999.985)。只是为了确保它不仅仅是 Python 的东西,我也用 Java 尝试过,同样的答案。

为什么是这样?我知道计算机不能将分数存储为精确值,因此可以预料到一定程度的错误,但是计算机评估这两个语句的方式有什么区别?

TL;DR:给我一个与数学上999999 * (.18 / 12)不同的答案,它们都应该评估为. 为什么?999999 * .18 / 1214999.985

4

1 回答 1

0

你最好在除法之前做一个乘法。由于与乘法期间发生的溢出相比,除法被正确表示的可能性较小。

于 2013-01-31T03:21:54.870 回答