use*_*001 6 double comparison matlab
我试图将一个双精度数组与一个标量双精度数进行比较以获得相等,但在某些情况下,平等性永远不会被识别出来.我怀疑这与双重表示的方式有关(例如,1.0 vs 1.00),但我无法弄明白.
例如,我已经生成了一个由数千个双值组成的数组,其中最后几个在某个时刻由下式给出
10.6000
-11.0000
10.2000
22.6000
3.4000
Run Code Online (Sandbox Code Playgroud)
如果我通过命令array==10.2(或array=10.2000)测试等于10.2(或10.2000 ),我返回一个0的数组.如果我手动(例如array=[10.6000 -11.0000 10.2000 22.6000 3.4000])将所显示的值放入数组中,则命令成功(即array==10.2返回0 0 1 0 0).如果我手动输入值,有人可以解释为什么相等成功,但如果在程序的上下文中生成数组则会失败?我能够通过使用近似而不是精确的比较(例如(array<10.20001) & (array>10.19999))来纠正比较失败,但这似乎不令人满意.
编辑:通过迭代加法或减法常量double(例如,0.2)生成数组中的值.因此,该阵列的模数0.2应该在任何地方都等于0.实际上,每个元素的模数等于0或者0.2,如下面数组中的上述数字序列所示:
mod(array,0.2)
...
0.2000
0
0.2000
0.2000
0
Run Code Online (Sandbox Code Playgroud)
同样,如果将值手动放置在数组中并且采用模数,0则获得所有s 的期望值.