需要解释为什么以下代码跨越无穷大

时间:2017-03-19 17:33:01

标签: python python-3.x

我是python的初学者,并且想知道为什么代码跨越无穷大时应该在1处停止。

def main():
    i = 0.0
    while i != 1.0:
        print("i =", i)
        i += 0.1
main()

2 个答案:

答案 0 :(得分:3)

This is a well known problem in Python.

您的变量i永远不会变为1,而是变为0.9999999999999999。

改为:

def main():
    i = 0.0
    while i <= 1.0:
        print("i =", i)
        i += 0.1

答案 1 :(得分:1)

在一般情况下,当然你不应该通过平等来比较浮点数,但还有更多:当你像这样添加浮点数时会出现浮点累积错误。

您可以使用整数计数器,并且每次都应用乘法以避免这种情况。

def main():
    i = 0.0
    count = 0
    while i < 1.0:
        print("i =", i)
        count += 1
        i = count*0.1

main()

我已将i != 1.0替换为i < 1.0因为您只需要它,但它甚至可以与!=一起使用(虽然我不建议这样做),因为用整数计数器计算的方式不再存在累积误差。