2010-09-01 14 views
6

Acabo de encontrar un error en algunas manipulaciones numéricas en mi programa y me estoy poniendo un FloatDomainError (NaN)¿Puede alguien explicarme NaN en Ruby?

Así que empieza a registrar el número pasado con:

if(metric.is_a?(Numeric)) 
    self.metric = metric 
else 
    LOGGER.warn("metriC#{metric} is not a number") 
    self.metric=0 
end 

embargo, el número se pasa en es NaN que al parecer is_a?(Numeric) como no consigo mi advertencia del registro, y que pasa a mi métrica métrica = método, que es donde consigo mi FloatDomainError

Ahora, corríjame si me equivoco, pero no se parece ser semánticamente incorrecto tener un NaN (No es un número) ser del tipo Numérico? ¿Alguien me puede explicar esto?

BTW usando jruby-1.4.1

+1

Si sólo había algunos restaurantes indios cercanos. . :) could not help: D –

+1

Tendríamos una respuesta deliciosa :) – brad

Respuesta

5

Los números de coma flotante IEEE 754 definen -INFINITY + INFINITY y NotANumber para que sea posible reaccionar a la división digamos por cero. También puede calcular con estos por ejemplo, 2 + INF INF =

NaN no es una característica de rubí uniqe, que son numéricos en Java, C++, ... demasiado

7

creo que hacer una serie NaN hace perfectamente sentido ...

tratar 0.0/0.0 en el IRB -> el resultado es NaN (que en este caso es infinito)

Infinity es matemáticamente tipo de un número, pero aún así, no se puede expresar con un tipo de datos ... en matemáticas se utiliza un símbolo especial también ...

PS: se puede utilizar métrica .¿yaya? para verificarlo ... entonces debería funcionar como espera ...

+0

Bastante, solo creo semánticamente que 'Not a Number' es un Number es un poco raro ... – brad

+0

@brad: bueno, estoy de acuerdo , el nombre para ese estado no está bien elegido ... :) – apirogov

Cuestiones relacionadas