Qualcuno può spiegare a me NaN in Ruby?
Domanda
Ho appena trovato un bug in alcune manipolazioni numero nel mio programma e sto ottenendo un FloatDomainError (NaN)
Così ho iniziato la registrazione del numero di passata con:
if(metric.is_a?(Numeric))
self.metric = metric
else
LOGGER.warn("metric #{metric} is not a number")
self.metric=0
end
Ma il numero viene passato in è NaN
che apparentemente is_a?(Numeric)
come non ho ricevuto il mio avvertimento di registro e passa metrica alla mia metrica = metodo, che è dove ho la mia FloatDomainError
Ora, correggimi se sbaglio, ma non è vero sembrano semanticamente sbagliato avere un NaN
(non un numero) sia di tipo numerico ?? Qualcuno può spiegare questo a me?
BTW con JRuby-1.4.1
Soluzione
IEEE 754 numeri in virgola mobile definiscono -Infinity + INFINITY e NotANumber per permettere di reagire a dire consente divisione per zero. si può anche calcolare con questi per esempio 2 + INF = INF
NaN non è una caratteristica rubino uniqe, sono numerica in Java, C ++, ... troppo
Altri suggerimenti
Credo che per fare un certo numero NaN rende perfettamente senso ...
provare 0.0 / 0.0 in IRB -> il risultato è NaN (che in questo caso è infinito)
Infinity è matematicamente una specie di numero, ma ancora, non si può esprimere con un tipo di dati ... in matematica si utilizza un simbolo speciale troppo ...
PS: È possibile utilizzare metric.nan? controllarlo ... allora dovrebbe funzionare come previsto ...