matlab mod()函数给出了错误的答案
我试着用Matlab解决一些问题,当dt*j是整数时,存储结果, 使用以下代码matlab mod()函数给出了错误的答案,matlab,Matlab,我试着用Matlab解决一些问题,当dt*j是整数时,存储结果, 使用以下代码 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 我用dt=1E-4再次尝试了这个方法,它给出了正确的结果。谁能告诉我这里发生了什么事?谢谢。不要直接将浮点数与=进行比较,而是检查它们是否非常接近: j=1; dt = 1E-05; a=[]; whi
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
我用dt=1E-4再次尝试了这个方法,它给出了正确的结果。谁能告诉我这里发生了什么事?谢谢。不要直接将浮点数与
=
进行比较,而是检查它们是否非常接近:
j=1;
dt = 1E-05;
a=[];
while dt*j <=20
if abs(mod(dt*j,1)) < 1e-10
a=round([a;[dt*j,j]]);
end
j=j+1;
end
j=1;
dt=1E-05;
a=[];
而dt*j我猜有一些奇怪的舍入错误。我尝试了你的代码,得到了同样的结果。一种方法是使用mod(dt*j,1)==0,而不是使用mod(dt*j,1)
从维基百科的双精度浮点数格式页面上可以看出:
1.0000000000000002,最小值>1。从这一点我可以推断,使用双精度,你可以得到2E-16的数值分辨率。因此,您可以使用2E-15的阈值,这样更安全。浮点精度错误的另一个示例。是的,dt*300000==3 ans=0,但dt*400000==4,ans=1我很困惑,因为只有一些数字缺失,但我想这与计算机如何存储数字有关。这是一个浮点运算的问题。有一些问题:谢谢!它起作用了。我以前使用过这个==比较,但这个问题直到今天才出现……数值分辨率由eps给出,实际上是2e-16
j=1;
dt = 1E-05;
a=[];
while dt*j <=20
if abs(mod(dt*j,1)) < 1e-10
a=round([a;[dt*j,j]]);
end
j=j+1;
end