在for循环中,我在时间上与常数,分数时间步长进行积分,dt.
我只想保存整数(有限序数)时间点的模拟结果。我的解决方案如下,
dt = 0.1
steps = 100
for step in range(steps):
if (step*dt) % 1 == 0.0:
print step
我从来没有真正信任浮点数上的模运算。有没有更好的方法来检查浮子是否是完整的还是我只是偏执狂?
答案 0 :(得分:2)
这在任何编程语言中都很危险。 在您的示例中,。在许多情况下,步长可能不具有浮点的精确表示,因此累积的舍入误差导致测试错误地触发/不触发。在其他情况下,随着累积值变大,最终由于指数增加而开始失去精度(在您的示例中,假设Python默认使用单精度,在20971529次迭代后您将获得错误的触发)。 / p>
0.1
无法在浮点中完全表示,因此测试将永远不会通过(我想它可能会在2 ^ 24次迭代后执行)
尝试找到一种方法来避免对浮点值执行相等性测试(检查整数值就是这样一个测试)。因此,在您的情况下,只需在step % 10
上进行测试。
答案 1 :(得分:1)
我也不信任花车,你可以使用the Decimal type,或者你可以使用types。我更喜欢类型。