2009-04-30 10 views

Respuesta

2

0.0/0.0 funciona para mí en ruby ​​1.8.6.

El hilo ligada a por Pesto tiene esta función, que debería funcionar en plataformas donde números de coma flotante que se ejecutan conforme a IEEE 754:

def aNaN 
    s, e, m = rand(2), 2047, rand(2**52-1)+1 
    [sprintf("%1b%011b%052b", s,e,m)].pack("B*").unpack("G").first 
end 
+0

que da ZeroDivisionE rror: dividido por 0 –

+0

¿Qué versión de Ruby estás usando? –

+1

Nota: 0/0 da un ZeroDivisionError, pero 0.0/0.0 no. – Kudu

17

La forma más sencilla es utilizar 0.0/0.0. "NaN" .to_f no funciona, y hay alguna discusión in this thread sobre por qué.

+4

'0/0.0' también funciona .. (¡PS. ¡ESTO ES INSENTO!) –

30

Si necesita probar si un número es NaN, puede utilizar #nan? en él:

ruby-1.8.7-p352 :008 > (0/0.0).nan? #=> true 
ruby-1.8.7-p352 :009 > (0/1.0).nan? #=> false 
45

Desde Rubí 1.9.3 hay un constant para obtener el valor NaN

Float::NAN 
=> NaN 
+0

Esa constante está realmente disponible desde [1.9.2] (https://github.com/ruby/ruby/blob/trunk/doc/NEWS -1.9.2 # L87). – cremno

+1

Esto es mucho más expresivo que la respuesta aceptada. –

0

Asignación de una variable en los carriles se puede realizar de este modo (útil para la unidad de pruebas):

o.amount = BigDecimal.new('NaN') 
expect(o.valid?).to be false