6

warnings编译指示没有抱怨“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
4

3 回答 3

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 或更新版本,否则可能会在不同平台上产生不同的结果。

于 2012-07-05T14:01:54.913 回答
7

“不是数字”是最常表示为“NaN”的值的长名称。另见维基百科文章。用 NaN 计算实际上是有意义的(它甚至在 IEEE754 中有一个实际的位级表示)。

于 2012-07-05T14:02:28.817 回答
-4

NaNNiLin 字符串的数字对应项。

于 2012-07-05T14:00:07.330 回答