Matlab: 0 < NaN = 0

4

我一直被这个错误所困扰。

这是MATLAB预期的行为还是一个bug?

为什么0 < NaN不会产生错误?


谢谢大家,我刚在Java中测试了一下,其中0<Float.NaN=false。结果是一样的。不管怎样,Matlab是基于Java的。此外,我发现这个安全计算证书:不要与NaN进行比较说不要与NaN进行比较!这感觉像一个新手错误,尽管我已经编程10多年了。 - Zaki Mohzani
2
MATLAB肯定会用Java来进行用户界面和其他方面的操作,但需要明确的是,MATLAB中的核心数值算法都是基于C++代码或标准数值库。 - Edric
2个回答

8
根据MathWorks的NaN文档,唯一一个不会返回false的逻辑运算符是~=(不等于),这在逻辑上是有道理的:如果某个东西是“非数字”,它就不能(也不应该)与数字进行比较。NaN无法等于任何东西。此外,这是IEEE标准: NaN是无序的,因此无法进行比较。它在任何符合IEEE 754标准的语言中都不起作用。简而言之,这不是一个错误。

为什么你说“NaN上唯一定义良好的逻辑运算符是~=”?文档说明涉及NaN的逻辑运算始终返回false,除了~=。因此,==~=NaN上都是定义良好的。 - Luis Mendo
@LuisMendo 修改了我不太好的用词。 - erip
1
现在加1。不过,我不会说“因此你不能使用任何比较运算符与NaN”。你是可以的。你只需要理解结果,可以表述为“NaN不等于任何东西”。 - Luis Mendo

8

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接