我是python的初学者,并且想知道为什么代码跨越无穷大时应该在1处停止。
def main():
i = 0.0
while i != 1.0:
print("i =", i)
i += 0.1
main()
答案 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
因为您只需要它,但它甚至可以与!=
一起使用(虽然我不建议这样做),因为用整数计数器计算的方式不再存在累积误差。