Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
matlab mod()函数给出了错误的答案_Matlab - Fatal编程技术网

matlab mod()函数给出了错误的答案

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

我试着用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=[];
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