从未见过这样的事情.简单的循环:
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
浮点舍入错误.这就是我最后三个价值所得到的:
99.98000000001424
99.99000000001425
100.00000000001425
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
148 次 |
| 最近记录: |