1 ruby floating-point nan conditional-statements
如果数字是“NaN”值,我如何检查 if 语句?我以为这会奏效
2.4.0 :003 > i = Float::NAN
=> NaN
2.4.0 :004 > puts "hi" if i
hi
=> nil
2.4.0 :005 > puts "hi" if i != Float::NAN
hi
=> nil
2.4.0 :006 > i
=> NaN
2.4.0 :007 > puts "hi" if i == Float::NAN
=> nil
Run Code Online (Sandbox Code Playgroud)
但是正如你所看到的,尽管我将“i”设置为“NaN”,但我得到了上面令人困惑的输出。
尽管我将“i”设置为“NaN”,但我得到了上面令人困惑的输出。
根据IEE?754 规范,这是正确的行为。你会在任何其他语言中发现同样的事情,假设它已经正确地实现了规范。
# In Ruby:
Float::NAN == Float::NAN
#=> false
// In JavaScript:
NaN == NaN
// false
Run Code Online (Sandbox Code Playgroud)
该规范还提供了推荐功能列表,其中包括:
isnan(x)- 的谓词"x is a NaN",相当于"x ? x"。
在 ruby 中,这已实现为Float#nan?:
Float::NAN.nan?
#=> true
Run Code Online (Sandbox Code Playgroud)
int
isnan(double n)
{
return double_ne(n, n);
}
static int
double_ne(double n1, double n2)
{
return n1 != n2;
}
Run Code Online (Sandbox Code Playgroud)