我正在尝试将一个双精度浮点数数组与一个标量双精度浮点数进行相等性比较,但在某些情况下无法识别相等性。我怀疑这与双精度浮点数的表示方式有关(例如,1.0与1.00),但我无法弄清楚。
例如,我生成了一个由成千上万个双精度浮点数值组成的数组,在某个时间点上,其中最后几个值如下:
10.6000
-11.0000
10.2000
22.6000
3.4000
如果我使用命令
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)
),但这似乎并不令人满意。编辑:数组中的值是通过迭代加或减一个常数双精度数(例如,
0.2
)生成的。因此,该数组对0.2
取模应该处处相等于0
。实际上,每个元素的模等于0
或0.2
,如下所示:mod(array,0.2)
...
0.2000
0
0.2000
0.2000
0
如果手动将值放入数组并取模,那么所有0
的预期值将得到。
0.2
)來生成的,因此在進行模0.2
(mod(array,0.2)
) 時,數組中的數字在數學上應該等於 0。實際上,它們不是。它們等於 0 或 0.2。但當我手動輸入任何數組中的數字並將模 0.2 應用於它們時,會給出預期值 0。你能解釋這種行為嗎?謝謝! - user001