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

War es hilfreich?

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

berechnen

NaN 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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top