为什么'NaN'数字根据警告pragma?

时间:2012-07-05 13:53:52

标签: perl nan

warnings pragma并没有抱怨'NaN'和'nan'是非数字的。

我感到有些惊讶(并且害怕)。

为什么warnings没有为他们发出习惯'Argument isn't numeric in addition (+)

测试用例

$ perl -Mstrict -wE 'say 0+$_ for qw/string NaN nan fail/;'
Argument "string" isn't numeric in addition (+) at -e line 1.
0
0
0
Argument "fail" isn't numeric in addition (+) at -e line 1.
0

3 个答案:

答案 0 :(得分:10)

来自perlop

  

二进制“< =>”返回-1,0或1,具体取决于是否为左   参数在数值上小于,等于或大于右   论点。如果您的平台支持NaN(非数字)作为数字   使用“< =>”的值返回undef。 NaN不是“<”,“==”,   “>”,“< =”或“> =”任何东西(甚至是NaN),所以那些5返回false。 NaN!=   NaN返回true,NaN也是如此!=其他任何内容。

     

如果你的平台   不支持NaN,那么NaN只是一个数字值为0的字符串。

NaN在不同平台上表现不同。它在某种程度上是数值的,因为它可以在数值运算中起作用。但它也不是一个数字,因为它有不确定的价值。

此外,它的行为不可移植为:

perl -E "say 'yes' if 0 == 'NaN'"
除非您使用Perl 5.22或更新版本,否则

可能会在不同平台上产生不同的结果。

答案 1 :(得分:7)

“不是数字”是最常表示为“NaN”的值的长名称。另见the wikipedia article。使用NaN进行计算实际上是有意义的(它甚至在IEEE754中具有实际的位级表示)。

答案 2 :(得分:-4)

NaN是字符串中NiL的数字对应物。