web-dev-qa-db-ja.com

RubyでNaN(数値ではない)を宣言するにはどうすればよいですか?

また、「NaN」.to_fはNaNの代わりに0を返します。

39
tom hanky

Ruby 1.9.3なので、NaN値を取得するための 定数 があります

Float::NAN
=> NaN
49
Konrad Reiche

数値がNaNであるかどうかをテストする必要がある場合は、#nan?を使用できます。

Ruby-1.8.7-p352 :008 > (0/0.0).nan? #=> true 
Ruby-1.8.7-p352 :009 > (0/1.0).nan? #=> false 
30
Kostas

最も簡単な方法は、0.0 / 0.0を使用することです。 "NaN" .to_fが機能せず、いくつかの議論があります このスレッドで 理由について。

17
Pesto

0.0 / 0.0はRuby 1.8.6で動作します。

Pestoによってリンクされたスレッドにはこの機能があり、IEEE754に従って浮動小数点数が実装されているプラ​​ットフォームで機能するはずです。

def aNaN
    s, e, m = Rand(2), 2047, Rand(2**52-1)+1
    [sprintf("%1b%011b%052b", s,e,m)].pack("B*").unpack("G").first
end
2
Nathan Kitchen

Railsで変数を割り当てると、次のように実行できます(ユニットテストに役立ちます)。

o.amount = BigDecimal.new('NaN')
expect(o.valid?).to be false
0