2015-05-06 7 views
6

एनएएन मैक्रो के अलावा, सी 99 के पास फ्लोटिंग पॉइंट नंबर, nanf(const char *tagp) फ़ंक्शन और strtof("NAN(char-sequence)") के लिए NaN मान उत्पन्न करने के दो तरीके हैं।NaN जनरेटिंग फ़ंक्शंस के लिए "char-sequence" तर्क क्या है?

नाएन उत्पन्न करने के इन दोनों तरीकों में एक वैकल्पिक स्ट्रिंग तर्क (* nanf() में टैगप और स्ट्रेटोफ़ विधि में चार अनुक्रम) लेते हैं। यह स्ट्रिंग तर्क वास्तव में क्या करता है? मैं इस बात का कोई ठोस उदाहरण नहीं ढूंढ पा रहा हूं कि आप इसका उपयोग कैसे करेंगे। cppreference.com से हमने:

कॉल नेन ("स्ट्रिंग") कॉल strtod के बराबर ("नेन (स्ट्रिंग)", (चार **) शून्य) है;

कॉल नैन ("") कॉल स्ट्रेट ("एनएएन()", (char **) NULL के बराबर है);

कॉल नैन (एनयूएलएल) कॉल स्ट्रेट ("एनएएन", (चार **) न्यूल के बराबर है);

और nan(3) का कहना है:

इन कार्यों एक शांत NaN का प्रतिनिधित्व (tagp द्वारा निर्धारित) लौट आते हैं। [स्निप] तर्क टैगप का उपयोग अनिर्दिष्ट तरीके से किया जाता है। आईईईई 754 सिस्टम पर, NaN के कई प्रस्तुतिकरण हैं, और टैगप एक का चयन करता है।

यह वास्तव में मुझे नहीं बताता कि मैं टैगप स्ट्रिंग के लिए क्या उपयोग कर सकता हूं या मैं इसका उपयोग क्यों करना चाहता हूं। क्या इस टैग स्ट्रिंग के लिए वैध विकल्पों में से कोई भी सूची है, और डिफ़ॉल्ट nanf(NULL) पर किसी का उपयोग करने का क्या कारण होगा?

+0

cppreference पेज आप लिंक किए गए एक ठोस उदाहरण – Cubbi

+0

वाह है। मुझसे यह चूक कैसे हुई। हालांकि मुझे अभी भी यकीन नहीं है कि उदाहरण में दो प्रतिनिधित्वों के बीच क्या अंतर है। – mshildt

उत्तर

7

टीएल; डॉ: tagp तर्क आपको विभिन्न एनएएन मान रखने की क्षमता देता है।

यह नैन (3) के लिए मैन पेज से है जो tagp पर थोड़ी अधिक जानकारी देता है।

मुख्य रूप से:

नेन() फ़ंक्शन एक शांत NaN, जिसका अंश क्षेत्र अनुगामी एक अहस्ताक्षरित पूर्णांक के लिए tagp परिवर्तित करने का परिणाम होता है लौटने।

इससे आपको विभिन्न एनएएन मान रखने की क्षमता मिलती है।

विशेष रूप C99 दलील doc से

:

Nans के अन्य अनुप्रयोगों में उपयोगी साबित हो सकता।NaNs के उपलब्ध हिस्सों को सहायक जानकारी को एन्कोड करने के लिए उपयोग किया गया है, उदाहरण के लिए NaN की उत्पत्ति के बारे में। 0Nअनियमित भंडारण भरने के लिए नाइन सिग्नलिंग उम्मीदवार हो सकते हैं; और उनके उपलब्ध हिस्सों अनियमित फ्लोटिंग ऑब्जेक्ट्स को अलग कर सकते हैं। आईईसी 605 9 5 नाइन और जाल हैंडलर संकेतक संभावित रूप से डायग्नोस्टिक जानकारी या विशेष अंकगणित को लागू करने के लिए हुक प्रदान करते हैं।

इसका कार्यान्वयन here है। टिप्पणियों में उल्लेख के अनुसार, आपको लगता है कि यह मानक अनुरूप हो सकता है या नहीं। हालांकि, यह आपको एक विचार देना चाहिए कि tagp का उपयोग किस लिए किया जाता है।

आदमी पेज के रूप में, आप देख सकते हैं प्रतिस्थापन ऊपर उल्लेख किया है:

nan("1") = nan (7ff8000000000001) 
nan("2") = nan (7ff8000000000002) 

पूर्ण आदमी यहाँ पेज:

नेन (3) बीएसडी पुस्तकालय कार्यों मैनुअल
नेन (3)

NAME नैन - एक शांत NaN

उत्पन्न करें

SYNOPSIS # शामिल

double 
nan(const char *tagp); 

long double 
nanl(const char *tagp); 

float 
nanf(const char *tagp); 

वर्णन नेन() फ़ंक्शन एक शांत NaN, जिसका अंश क्षेत्र अनुगामी एक अहस्ताक्षरित पूर्णांक के लिए tagp परिवर्तित करने का परिणाम होता है लौटने। यदि NaN के पीछे वाले अंश फ़ील्ड में टैगप बहुत बड़ा है, तो टैगप द्वारा प्रतिनिधित्व किए गए पूर्णांक के कम से कम महत्वपूर्ण बिट्स का उपयोग किया जाता है।

विशेष मूल्य यदि टैगप में कोई गैर-न्यूमेरिक वर्ण शामिल हैं, तो फ़ंक्शन एक NaN whos पिछला भाग फ़ील्ड देता है शून्य।

यदि टैग खाली है, तो फ़ंक्शन एक NaN लौटाता है जो पिछला भाग क्षेत्र शून्य है।

मानक नेन() फ़ंक्शन आईएसओ/आईईसी के अनुरूप 9899: 2011।

बीएसडी जुलाई 01, 2008

+3

यह नोट करना कोई मानक यह बताता है कि कैसे 'tagp' एक NaN का पेलोड में परिवर्तित किया है महत्वपूर्ण है। मानकों कार्यान्वयन स्वतंत्रता क्या पेलोड में NaN के कारण होता है की एक प्राकृतिक भाषा के स्पष्टीकरण के हैश भंडारण की तरह काम करने के लिए अनुमति देने के लिए इस मुद्दे पर जानबूझ कर अस्पष्ट हैं। कार्यान्वयन के विशाल बहुमत या तो केवल 'tagp' तर्क उपेक्षा या एक पूर्णांक के रूप में यह व्याख्या है, लेकिन आप नहीं मानना ​​चाहिए कि यह मामला है। –

+0

अच्छा बिंदु @StephenCanon, धन्यवाद! – bentank

3

यह वास्तव में मुझे नहीं बताता कि मैं टैगप स्ट्रिंग के लिए क्या उपयोग कर सकता हूं या मैं इसका उपयोग क्यों करना चाहता हूं।

कुछ फ़्लोटिंग पॉइंट मानकों, उदाहरण के लिए, आईईईई -754, में कई अलग-अलग NaN मान हैं। यह nan फ़ंक्शन विनिर्देश कार्यान्वयन द्वारा निर्दिष्ट किए जा सकने वाले तरीके से स्ट्रिंग के आधार पर एक विशिष्ट NaN प्रतिनिधित्व का चयन करने के लिए कार्यान्वयन की अनुमति देता है।

संबंधित मुद्दे