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
答案 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
的数字对应物。