2009-04-30 6 views

답변

2

0.0/0.0 루비 1.8.6에서 작동합니다.

가장 간단한 방법은 0.0/0.0을 사용하는 것입니다
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

ZeroDivisionE rror : 0으로 나누기 –

+0

사용중인 Ruby 버전은 무엇입니까? –

+1

참고 : 0/0은 ZeroDivisionError를 제공하지만 0.0/0.0은 제공하지 않습니다. – Kudu

17

:

페스토에 링크 스레드 부동 소수점 숫자는 IEEE 754에 따라 구현되는 경우 플랫폼에서 작동해야이 기능을 가지고 있습니다. "NaN".to_f가 작동하지 않으며 이유에 대한 설명이 in this thread입니다. 당신이 숫자가 NaN 인 경우 테스트해야하는 경우

+4

'0/0.0'도 작동합니다 .. (PS.IISISANANE!) –

30

, 당신은 그것을 #nan?를 사용할 수 있습니다

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

을 루비가 NaN의 값을 얻을 수있는 constant이 1.9.3 이후

Float::NAN 
=> NaN 
+0

그 상수는 [1.9.2] (https://github.com/ruby/ruby/blob/trunk/doc/NEWS) 이후 실제로 사용 가능합니다. -1.9.2 # L87). – cremno

+1

이것은 허용 된 대답보다 훨씬 표현력이 있습니다. –

0

변수를 레일에 할당하면 다음과 같이 수행 할 수 있습니다 (단위 테스트에 유용함) :

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