2009-04-30 4 views

Antwort

2

0.0/0.0 funktioniert für mich auf Ruby 1.8.6.

Der Faden verbunden durch Pesto hat diese Funktion, die auf Plattformen arbeiten sollte wo Gleitkommazahlen IEEE implementiert nach 754:

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 
+0

das gibt ZeroDivisionE rror: dividiert durch 0 –

+0

Welche Version von Ruby verwenden Sie? –

+1

Hinweis: 0/0 gibt einen ZeroDivisionError, aber 0.0/0.0 nicht. – Kudu

17

Der einfachste Weg 0.0/0.0 zu verwenden ist. "NaN" .to_f funktioniert nicht, und es gibt eine Diskussion in this thread über warum.

+4

'0/0.0' funktioniert auch .. (PS. DAS IST INSANE!) –

30

Wenn Sie testen müssen, ob eine Zahl NaN ist, können Sie #nan? auf sie aus:

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

Seit Rubin gibt 1.9.3 ein constant ist der Wert NaN

Float::NAN 
=> NaN 
+0

Diese Konstante ist eigentlich verfügbar seit [1.9.2] (https://github.com/ruby/ruby/blob/trunk/doc/NEWS -1.9.2 # L87). – cremno

+1

Dies ist viel ausdrucksvoller als die angenommene Antwort. –

0

zu erhalten Das Zuweisen einer Variablen in Rails kann so erfolgen (nützlich für Komponententests):

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