浮点比较的意外行为

时间:2015-04-15 06:42:26

标签: python loops if-statement

我写了一个小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

1 个答案:

答案 0 :(得分:1)

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

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