Python虽然循环不稳定

use*_*100 5 python while-loop

从未见过这样的事情.简单的循环:

t_end = 100.0
t_step= 0.1
time = 0

while time<=t_end:
    time+=t_step
    print time
Run Code Online (Sandbox Code Playgroud)

最后3个印刷值:

...
99.9
100.0
100.1
Run Code Online (Sandbox Code Playgroud)

看起来对我来说.

现在,我将t_step更改为0.01:

t_end = 100.0
t_step= 0.01
time = 0

while time<=t_end:
    time+=t_step
    print time
Run Code Online (Sandbox Code Playgroud)

最后3个印刷值:

...
99.98
99.99
100.0
Run Code Online (Sandbox Code Playgroud)

问题:为什么在time = t_end = 100.0时它不会进入最后一个循环?

什么是替代解决方案?

JBe*_*rdo 10

因为这个100.0(总和的结果)可以大于100.0,所以你手工编写.你不应该比较浮点数是否相等......

你应该读这个:

每个计算机科学家应该知道的浮点运算

可能的方法:

>>> t_end = 100.0
>>> t_step = 0.01
>>> total = int(t_end/t_step)
>>> for x in itertools.accumulate((t_step for i in range(total + 1))):
    print(x)
Run Code Online (Sandbox Code Playgroud)

所以最后一个元素是:100.01000000001426


Wal*_*han 6

浮点舍入错误.这就是我最后三个价值所得到的:

99.98000000001424
99.99000000001425
100.00000000001425
Run Code Online (Sandbox Code Playgroud)