我试图用Matlab解决一些问题,并在dt * j为整数时存储结果,使用下面的代码 。matlab mod()函数给出了错误的答案
j=1;
dt = 1E-05;
a=[];
while dt*j <=20
if mod(dt*j,1) ==0
a=[a;[dt*j,j]];
end
j=j+1;
end
但是Matlab给了我不正确的结果。如下所示缺少一些整数(3,6,7,11等)。
a =
1 100000
2 200000
4 400000
5 500000
8 800000
9 900000
10 1000000
16 1600000
17 1700000
18 1800000
19 1900000
20 2000000
我试过再次使用dt = 1E-4,它给出了正确的结果。谁能告诉我这里发生了什么?谢谢。
浮点精度错误的另一个例子。它不是'mod'那是错误的,'dt * j'不是精确的预期值。 – Daniel
是的,dt * 300000 == 3 ans = 0但dt * 400000 == 4,ans = 1我很困惑,因为只有一些数字丢失,但我想它涉及如何计算机存储号 – user3413078
这是一个浮点算术。有一些问题:http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html – Daniel