你知道为什么我的循环 + 模数 (%) 会跳过 python 中的数字吗
Do you know why my loop + modulo (%) skips numbers in python
我正在尝试每 20 步更新一次,但它会跳过一些我不明白为什么的数字
time=np.linspace(0.1,100,1000)
for t in time:
if t % 2 ==0.0:
print(t, 'ms')
谢谢
这是因为 linespace
没有达到像 18.0
或 20.0
这样的精确值。由于浮点计算,有一个小的 epsilon。您可以像下面这样更改您的代码,然后您将命中所有数字:
time=np.linspace(0.1,100,1000)
epsilon = 0.0001
for t in time:
if t % 2 < epsilon:
print(t, 'ms')
另一种方法是每 20 步打印一次(第一次打印是在 19 之后):
time=np.linspace(0.1,100,1000)
epsilon = 0.0001
for i,t in enumerate(time):
if (i -19) % 20 ==0:
print(t, 'ms')
输出:
2.0 ms
4.0 ms
6.0 ms
8.0 ms
10.0 ms
12.0 ms
14.0 ms
16.0 ms
....
我正在尝试每 20 步更新一次,但它会跳过一些我不明白为什么的数字
time=np.linspace(0.1,100,1000)
for t in time:
if t % 2 ==0.0:
print(t, 'ms')
谢谢
这是因为 linespace
没有达到像 18.0
或 20.0
这样的精确值。由于浮点计算,有一个小的 epsilon。您可以像下面这样更改您的代码,然后您将命中所有数字:
time=np.linspace(0.1,100,1000)
epsilon = 0.0001
for t in time:
if t % 2 < epsilon:
print(t, 'ms')
另一种方法是每 20 步打印一次(第一次打印是在 19 之后):
time=np.linspace(0.1,100,1000)
epsilon = 0.0001
for i,t in enumerate(time):
if (i -19) % 20 ==0:
print(t, 'ms')
输出:
2.0 ms
4.0 ms
6.0 ms
8.0 ms
10.0 ms
12.0 ms
14.0 ms
16.0 ms
....