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

È stato utile?

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 ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top