【问题标题】:Unexpected behavior of floating point comparisons [duplicate]浮点比较的意外行为[重复]
【发布时间】:2015-04-15 06:42:25
【问题描述】:

我编写了一个小型 python 程序,由于我不知道的原因,它陷入了循环。

这是我的代码:

a = 0
b = 1
step = 0.1

while True:
    if a == b:
        print 'exit'
        break
    if a < b:
        a += step
        print a
    if a > b:
        a -= step
        print a

这是输出:

0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0
1.1
1.0
1.1
1.0
[...]

为什么循环没有终止,却产生大于 1 的值?

编辑:

我现在已经用十进制模块完成了:

from decimal import *

getcontext().prec = 1

a = 0
b = 1
step = Decimal('0.1')

while True:
    if a == b:
        print 'exit'
        break
    if a < b:
        a += step
        print a
    if a > b:
        a -= step
        print a

【问题讨论】:

  • 浮点数几乎从不相等。 floating-point-gui.de
  • @deceze 你应该把它放在一个答案中。
  • @Frank 我敢肯定在某个地方有一个很好的复制品,有人会因为他们在python 标签的家中而立即抽出... Martijn...? :)
  • 也许你应该使用 if()...elif()...else... 结构。并且浮动变量没有正确比较。

标签: python loops if-statement


【解决方案1】:

您永远不应该检查浮点值的相等性。最好的方法是对错误使用约束。

if abs(a - b) <= allowed_error :
    do something

【讨论】:

    猜你喜欢
    • 2012-07-17
    • 1970-01-01
    • 2011-10-24
    • 2023-04-05
    • 2012-10-26
    • 1970-01-01
    • 2015-09-06
    相关资源
    最近更新 更多