2013-10-01 8 views
6

मैं लूआ के लिए बिल्कुल नया हूं। परीक्षण के दौरान मैंने #INF/#IND खोजा। हालांकि, मुझे एक अच्छा संदर्भ नहीं मिल रहा है जो इसे समझाता है।लुआ में, #INF और #IND क्या है?

#INF, #IND, और समान (जैसे नकारात्मक) हैं और आप उन्हें कैसे उत्पन्न करते हैं और उनका उपयोग कैसे करते हैं?

+1

'1/0',' -1/0' और '0/0' –

+0

आपका लुआ निर्माण लुआ के' number' प्रकार के लिए एक फ्लोटिंग प्वाइंट प्रकार का उपयोग किया जाना चाहिए । (डिफ़ॉल्ट लुआ बिल्ड सी 'डबल' प्रकार का उपयोग करता है।) देखें [फ्लोटिंग-प्वाइंट अंकगणित के बारे में क्या हर कंप्यूटर वैज्ञानिक को पता होना चाहिए] (http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg डेविड गोल्डबर्ग द्वारा। एचटीएमएल)। –

उत्तर

7

#INF अनंत है, #IND NaN है। मेरी Windows मशीन पर

print(1/0) 
print(0/0) 

आउटपुट::

1.#INF 
-1.#IND 

एएनएसआई सी में इन के लिए कोई मानक प्रतिनिधित्व नहीं है के रूप में, आप अलग अलग परिणाम प्राप्त कर सकते हैं यह एक परीक्षण दे। उदाहरण के लिए:

inf 
-nan 
+1

'-1। # IND' एक विशेष NaN पैटर्न है जिसे 'इंडिफाइनाइट' कहा जाता है। डबल-परिशुद्धता संस्करण के लिए बिट पैटर्न '0xfff800000000000' है। – njuffa

6

@YuHao का विस्तार पहले से ही अच्छा जवाब है।

लूआ एक संख्या को एक स्ट्रिंग में परिवर्तित करते समय बहुत कम करता है, क्योंकि यह अंतर्निहित सी लाइब्रेरी कार्यान्वयन पर भारी निर्भर करता है। वास्तव में लुआ print implementation लूआ tostring पर कॉल करता है जो बदले में (अन्य कॉलों की एक श्रृंखला के बाद) lua_number2str macro का उपयोग करता है, जिसे C sprintf के संदर्भ में परिभाषित किया गया है। इस प्रकार अंत में आप देखें कि सीएन कार्यान्वयन का उपयोग करने वाले infinities और NaNs के लिए जो भी प्रतिनिधित्व होता है (यह भिन्न हो सकता है जिसके अनुसार संकलक का उपयोग लुआ को संकलित करने के लिए किया गया था और कौन सा सी रनटाइम आपके एप्लिकेशन से जुड़ा हुआ है)।

2

@YuHao पहले से ही इंगित कर चुका है कि +/- 1. # आईएनएफ (+ -inf) और -1। # IND (नैन), तो मैं बस इसे जोड़ना चाहता हूं (जिसे मुझे बस चाहिए) लुआ में:

  • "inf" (+/- 1. # iNF) अधिक संख्या को महत्व देता है कि (लुआ/सी) का प्रतिनिधित्व कर सकते हैं और भाषा है जिसे आप के लिए निरंतर प्रदान करता है: "math.huge"। तो आप + -INF के लिए लुआ के अंदर एक संख्या का परीक्षण कर सकते हैं; फ़ंक्शन "isINF()" नीचे दिखाता है कि इसका उपयोग कैसे करें।
  • "नैन" (- 1. # IND) ऐसा कुछ है जिसे संख्यात्मक रूप से संभाला नहीं जा सकता है: यह एक संख्या होनी चाहिए, इसकी नहीं, और जो भी आप इसके साथ करते हैं वह कुछ भी है। इस बात को ध्यान में रखें कि कोई भी NaN अन्य NaN के बराबर नहीं है; नीचे "isNAN()" फ़ंक्शन की तरह NaN की जांच करें।

local function isINF(value) 
    return value == math.huge or value == -math.huge 
end 

local function isNAN(value) 
    return value ~= value 
end