Kann mir jemand NaN in Ruby erklären?
Frage
Ich habe gerade einen Fehler in einiger Anzahl Manipulationen in meinem Programm und ich bin immer ein FloatDomainError (NaN)
gestartet Also ich die Nummer mit geben Anmeldung:
if(metric.is_a?(Numeric))
self.metric = metric
else
LOGGER.warn("metric #{metric} is not a number")
self.metric=0
end
Aber die Zahl übergeben wird, ist NaN
die offenbar is_a?(Numeric)
als ich nicht meine Warnung ausgeben, und es geht Metrik auf meiner metric = Methode, das ist, wo ich meine FloatDomainError
Jetzt korrigieren Sie mich, wenn ich falsch liege, aber scheint es nicht semantisch falsch ein NaN
(Not A Number) haben vom Typ Numerisch sein ?? Kann jemand mir dies erklären?
BTW mit JRuby-1.4.1
Lösung
IEEE 754 Gleitkommazahlen definieren -Infinity + INFINITY und NotANumber machen es möglich, können durch Null sagen Teilung zu reagieren. Sie können auch mit diesem für zB 2 + INF = INF
berechnenNaN ist kein uniqe Rubin Funktion, sie in Java numerisch sind, c ++, ... zu
Andere Tipps
ich denke, dass NaN eine Zahl macht Sinn macht, perfekt ...
versuchen 0.0 / 0.0 in irb -> das Ergebnis NaN (die in diesem Fall unendlich ist)
Infinity ist mathematisch Art einer Zahl, aber immer noch, können Sie es mit einem Datentyp nicht ausdrücken können ... in Mathematik verwenden Sie ein spezielles Symbol zu ...
PS: Sie können metric.nan benutzen? zu überprüfen, es ... dann sollte es funktionieren, wie Sie ...
erwarten