【发布时间】:2013-08-10 02:00:16
【问题描述】:
我今天花了一个小时试图找出原因
return abs(val-desired) <= 0.1
偶尔会返回False,尽管val 和desired 的绝对差异为<=0.1。经过一番调试,我发现-13.2 + 13.3 = 0.10000000000000142。现在我明白了 CPU 不能轻易表示大多数实数,但这是一个例外,因为你可以减去 0.00000000000000142 并得到 0.1,所以它可以用 Python 表示。
我在 Intel Core 架构 CPU 上运行 Python 2.7(这是我能够测试的全部)。我很想知道如何存储0.1 的值,尽管无法将算术应用于特定的浮点值。 val 和 desired 是 float 值。
【问题讨论】:
-
你会发现这很有用:floating-point-gui.de
-
我知道 CPU 不能轻易地以高分辨率表示大多数浮点数 ...您完全误解了,浮点数都是 [暂时忘记整数] CPU 可以表示,并且它们可以以它们所能达到的全部精度来表示它们。现在,如果您将 floating-point 替换为 real 您的理解会更正确。
-
这个问题每天都会被问好几次,无论是对于 python、C、Java 还是其他任何东西。 -1 在浪费其他成员的时间之前没有搜索它。 0.1 不能在浮点数(单精度或双精度)中精确表示,因此必须存在误解或 fpu 之外的机制会产生精确的 0.1 值。
-
@moooeeeep:这不是那个问题的重复。再次阅读问题。 OP 指出这 是 被理解的。不明白的是结果的准确性。
-
@BlackBear 为这个添加书签,不像经常被引用的 Goldberg document 那样笨拙