2009-04-30 12 views

उत्तर

2

0.0/0.0 रूबी 1.8.6 पर मेरे लिए काम करता है।

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

जो ज़ीरोडिविजनई देता है rror: 0 –

+0

द्वारा विभाजित रूबी का कौन सा संस्करण आप उपयोग कर रहे हैं? –

+1

नोट: 0/0 एक ZeroDivisionError देता है, लेकिन 0.0/0.0 नहीं करता है। – Kudu

17

सबसे आसान तरीका 0.0/0.0 उपयोग करने के लिए है:

धागा Pesto से जुड़े इस समारोह है, जो प्लेटफार्मों पर काम करना चाहिए जहां फ्लोटिंग प्वाइंट संख्या आईईईई 754 के अनुसार लागू किया जाता है है। "NaN" .to_f काम नहीं करता है, और कुछ चर्चा in this thread क्यों है।

+4

'0/0.0' भी काम करता है .. (पीएस। यह इंसान है!) –

30

आप अगर एक नंबर NaN है परीक्षण करने के लिए की जरूरत है, आप उस पर #nan? उपयोग कर सकते हैं:

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

के बाद रूबी 1.9.3 है एक constant NaN मूल्य प्राप्त करने के

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 
संबंधित मुद्दे