5

从来没有见过这样的事情。简单的while循环:

t_end = 100.0
t_step= 0.1
time = 0

while time<=t_end:
    time+=t_step
    print time

最后 3 个打印值:

...
99.9
100.0
100.1

在我看来是对的。

现在,我将 t_step 更改为 0.01:

t_end = 100.0
t_step= 0.01
time = 0

while time<=t_end:
    time+=t_step
    print time

最后 3 个打印值:

...
99.98
99.99
100.0

问题:为什么当 time = t_end =100.0 时它不进入最终循环?

什么是替代解决方案?

4

3 回答 3

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)

所以最后一个元素是:100.01000000001426

于 2012-08-27T18:23:46.127 回答
6

浮点舍入误差。这是我最后三个值得到的结果:

99.98000000001424
99.99000000001425
100.00000000001425
于 2012-08-27T18:23:43.363 回答
4

这是源于浮点计算的不准确性。您依靠 == 运算符来比较两个浮点值,这是不行的。您看到的“100.0”实际上可能类似于“100.000000000314”

于 2012-08-27T18:24:51.893 回答