IEEE754 NaN मानों के लिए झूठे लौटाने वाले सभी तुलनाओं के लिए तर्क क्या है?


267

NaN मूल्यों की तुलना अन्य सभी मूल्यों से अलग क्यों होती है? यही है, ऑपरेटरों के साथ सभी तुलना ==, <=,> =, <,> जहां एक या दोनों मूल्य NaN रिटर्न है, अन्य सभी मूल्यों के व्यवहार के विपरीत है।

मुझे लगता है कि यह किसी तरह से संख्यात्मक संगणनाओं को सरल करता है, लेकिन मुझे स्पष्ट रूप से कहा गया कारण नहीं मिल सका है, यहां तक ​​कि काहान द्वारा IEEE 754 की स्थिति पर व्याख्यान नोट्स में भी जो अन्य डिजाइन निर्णयों पर विस्तार से चर्चा नहीं करता है।

सरल डेटा प्रोसेसिंग करते समय यह विचलित व्यवहार परेशानी पैदा कर रहा है। उदाहरण के लिए, जब रिकॉर्ड्स की सूची को सी प्रोग्राम में कुछ वास्तविक-मूल्यवान फ़ील्ड को सॉर्ट करते हैं तो मुझे NaN को अधिकतम तत्व के रूप में संभालने के लिए अतिरिक्त कोड लिखने की आवश्यकता होती है, अन्यथा सॉर्ट एल्गोरिथ्म भ्रमित हो सकता है।

संपादित करें: अब तक के सभी उत्तर तर्क देते हैं कि NaN की तुलना करना व्यर्थ है।

मैं सहमत हूं, लेकिन इसका मतलब यह नहीं है कि सही उत्तर गलत है, बल्कि यह नॉट-ए-बुलियन (NaB) होगा, जो सौभाग्य से मौजूद नहीं है।

इसलिए तुलना के लिए सही या गलत लौटने का विकल्प मेरे विचार से मनमाना है, और सामान्य डेटा प्रोसेसिंग के लिए यह फायदेमंद होगा यदि यह सामान्य नियमों (== की संवेदनशीलता, <, ==,>) की त्रिकोणीयता का पालन करे, तो लेस्ट डेटा स्ट्रक्चर्स। जो इन कानूनों पर भरोसा करते हैं वे भ्रमित हो जाते हैं।

तो मैं इन कानूनों को तोड़ने के कुछ ठोस लाभ के लिए कह रहा हूं, न कि केवल दार्शनिक तर्क।

संपादित करें 2: मुझे लगता है कि मुझे अब समझ में आया कि NaN को अधिकतम बनाना एक बुरा विचार क्यों होगा, यह ऊपरी सीमाओं की गणना को गड़बड़ कर देगा।

NaN! = NaN जैसे लूप में अभिसरण का पता लगाने से बचने के लिए वांछनीय हो सकता है

while (x != oldX) {
    oldX = x;
    x = better_approximation(x);
}

जो कि एक छोटे से सीमा के साथ पूर्ण अंतर की तुलना करके बेहतर लिखा जाना चाहिए। इसलिए IMHO यह NaN में रिफ्लेक्सिटी को तोड़ने के लिए एक अपेक्षाकृत कमजोर तर्क है।


2
एक बार एक NaN अभिकलन में प्रवेश करने के बाद, यह आमतौर पर कभी नहीं छोड़ेगा, इसलिए आपका अभिसरण परीक्षण एक अनंत लूप बन जाएगा। यह आमतौर पर कॉलिंग रूटीन में परिवर्तित होने में विफलता की रिपोर्ट करना बेहतर होता है, संभवतः NaN को वापस करके। इस प्रकार, लूप संरचना आम तौर पर कुछ बन जाती है while (fabs(x - oldX) > threshold), लूप से बाहर निकलना अगर अभिसरण होता है या एक NaN गणना में प्रवेश करता है। NaN का पता लगाना और उपयुक्त उपाय करना तब लूप के बाहर होता है।
स्टीफन कैनन

1
यदि NaN उस आदेश का न्यूनतम तत्व था, जबकि लूप अभी भी काम करेगा।
Starblue

2
विचार के लिए भोजन: grouper.ieee.org/groups/1788/email/pdfmPSi1DgZZf.pdf पृष्ठ 10
स्टारबेल

जवाबों:


535

मैं IEEE-754 समिति का सदस्य था, मैं चीजों को थोड़ा स्पष्ट करने में मदद करने की कोशिश करूँगा।

सबसे पहले, फ़्लोटिंग-पॉइंट नंबर वास्तविक संख्या नहीं हैं, और फ़्लोटिंग-पॉइंट अंकगणित वास्तविक अंकगणित के स्वयंसिद्धों को संतुष्ट नहीं करता है। ट्रायकोटॉमी वास्तविक अंकगणित की एकमात्र संपत्ति नहीं है जो न तो तैरने के लिए रखती है, न ही सबसे महत्वपूर्ण। उदाहरण के लिए:

  • जोड़ साहचर्य नहीं है।
  • वितरण कानून धारण नहीं करता है।
  • बिना व्युत्क्रम के फ्लोटिंग-पॉइंट नंबर हैं।

मैं जा सकता था। एक निश्चित आकार के अंकगणितीय प्रकार को निर्दिष्ट करना संभव नहीं है जो वास्तविक अंकगणित के सभी गुणों को संतुष्ट करता है जिसे हम जानते हैं और प्यार करते हैं। 754 समिति को उनमें से कुछ को मोड़ने या तोड़ने का फैसला करना है। यह कुछ बहुत ही सरल सिद्धांतों द्वारा निर्देशित है:

  1. जब हम कर सकते हैं, हम वास्तविक अंकगणित के व्यवहार से मेल खाते हैं।
  2. जब हम नहीं कर सकते, तो हम उल्लंघन का अनुमान लगाने और जितना संभव हो उतना आसान निदान करने की कोशिश करते हैं।

आपकी टिप्पणी के बारे में "इसका मतलब यह नहीं है कि सही उत्तर गलत है", यह गलत है। विधेय (y < x)पूछता है कि क्या yइससे कम है x। यदि yNaN है, तो यह किसी भी फ्लोटिंग-पॉइंट वैल्यू से कम नहीं हैx , इसलिए उत्तर आवश्यक रूप से गलत है।

मैंने उल्लेख किया कि ट्रिकोटॉमी फ्लोटिंग-पॉइंट वैल्यू के लिए नहीं है। हालांकि, एक समान संपत्ति है जो धारण करती है। क्लाज 5.11, 754-2008 मानक के पैरा 2:

चार परस्पर अनन्य संबंध संभव हैं: से कम, बराबर, अधिक से अधिक, और अव्यवस्थित। आखिरी मामला तब उठता है जब कम से कम एक ऑपरेंड NaN होता है। प्रत्येक NaN अपने आप सहित हर चीज के साथ अनियंत्रित की तुलना करेगा।

जहां तक ​​NaNs को संभालने के लिए अतिरिक्त कोड लिखने का सवाल है, तो आमतौर पर यह संभव है (हालांकि हमेशा आसान नहीं होता) अपने कोड को इस तरह से स्ट्रक्चर करना कि NaN ठीक से गिर जाए, लेकिन यह हमेशा ऐसा नहीं होता है। जब ऐसा नहीं होता है, तो कुछ अतिरिक्त कोड आवश्यक हो सकते हैं, लेकिन यह सुविधा के लिए भुगतान करने के लिए एक छोटी सी कीमत है जो बीजीय बंद करने के लिए फ्लोटिंग-पॉइंट अंकगणित में लाया गया है।


परिशिष्ट: कई टिप्पणीकारों ने तर्क दिया है कि यह NaN को अपनाने वाले आधार पर समानता और त्रिकोटॉमी की संवेदनशीलता को बनाए रखने के लिए अधिक उपयोगी होगा! = NaN किसी भी परिचित स्वयंसिद्ध को संरक्षित करने के लिए प्रतीत नहीं होता है। मैं इस दृष्टिकोण के लिए कुछ सहानुभूति रखने का स्वीकार करता हूं, इसलिए मैंने सोचा कि मैं इस उत्तर पर फिर से विचार करूंगा और थोड़ा और संदर्भ प्रदान करूंगा।

कहन से बात करने में मेरी समझ यह है कि NaN! = NaN की उत्पत्ति दो व्यावहारिक विचारों से हुई है:

  • यही कारण है कि x == yके बराबर होना चाहिए x - y == 0जब भी संभव हो (असली गणित के प्रमेय होने के बजाए, इस तुलना अधिक स्थान कुशल, समय मानक विकसित किया गया था पर अत्यंत महत्व का था जिसमें से हार्डवेयर कार्यान्वयन बनाता है - टिप्पणी, तथापि, कि इस एक्स के लिए उल्लंघन किया जाता है = y = अनन्तता, इसलिए यह अपने आप में एक महान कारण नहीं है; यह यथोचित रूप से तुला हो सकता है (x - y == 0) or (x and y are both NaN))।

  • इससे भी महत्वपूर्ण बात isnan( )यह है कि उस समय कोई विधेय नहीं था जो 8087 अंकगणित में NaN को औपचारिक रूप दिया गया था; प्रोग्रामर को NaN मानों का पता लगाने का एक सुविधाजनक और कुशल साधन प्रदान करना आवश्यक था isnan( )जो प्रोग्रामिंग भाषाओं पर निर्भर नहीं था जो कुछ वर्षों तक प्रदान कर सकता था। मैं कहन के विषय पर खुद के लेखन का उद्धरण दूंगा:

वहाँ NaNs से छुटकारा पाने के लिए कोई रास्ता नहीं था, वे CRAYs पर Indefinites के रूप में बेकार हो जाएगा; जैसे ही एक का सामना किया गया, एक अनिश्चित समय के लिए अनिश्चित काल के लिए जारी रखने के बजाय गणना को सबसे अच्छा बंद कर दिया जाएगा। यही कारण है कि NaN पर कुछ संचालन गैर-NaN परिणाम देने चाहिए। कौन सा ऑपरेशन? ... अपवाद C "x == x" और "x! = X" की भविष्यवाणी करते हैं, जो क्रमशः प्रत्येक अनंत या परिमित संख्या x के लिए 1 और 0 हैं, लेकिन यदि x संख्या नहीं है (NaN) तो रिवर्स करें; ये NaN और उन भाषाओं में संख्याओं के बीच एकमात्र सरल अविशिष्ट भेद प्रदान करते हैं जिनमें NaN के लिए एक शब्द का अभाव होता है और IsNaN (x) का अनुमान लगाते हैं।

ध्यान दें कि यह भी तर्क है कि "नॉट-ए-बुलियन" की तरह कुछ वापस करने के नियम हैं। हो सकता है कि यह व्यावहारिकता गलत थी, और मानक की आवश्यकता होनी चाहिए थी isnan( ), लेकिन इससे NaN को कई वर्षों तक कुशलतापूर्वक और आसानी से उपयोग करना असंभव हो गया, जबकि दुनिया प्रोग्रामिंग भाषा को अपनाने के लिए इंतजार कर रही थी। मुझे यकीन नहीं है कि यह एक उचित व्यापार होगा।

कुंद होना: NaN == NaN का परिणाम अब बदलने वाला नहीं है। इंटरनेट पर शिकायत करने की तुलना में इसके साथ रहना बेहतर है। यदि आप यह तर्क देना चाहते हैं कि कंटेनरों के लिए उपयुक्त ऑर्डर रिलेशन भी मौजूद होना चाहिए , तो मैं यह सलाह देने की सलाह दूंगा कि आपकी पसंदीदा प्रोग्रामिंग भाषा totalOrderIEEE-754 (2008) में मानकीकृत विधेय को लागू करें । तथ्य यह है कि यह पहले से ही कहन की चिंता की वैधता पर बात नहीं करता है जिसने वर्तमान स्थिति को प्रेरित किया है।


16
मैंने आपके अंक 1 और 2 को पढ़ा। तब मैंने देखा कि वास्तविक अंकगणित (पहले स्थान पर NaN की अनुमति देने के लिए विस्तारित) NaN स्वयं के बराबर है - केवल इसलिए कि गणित में, कोई भी इकाई बिना किसी अपवाद के, स्वयं के बराबर है। अब मैं उलझन में हूँ: IEEE ने "वास्तविक अंकगणित के व्यवहार से मेल क्यों नहीं किया", जो NaN == NaN बनाता है? मैं क्या खो रहा हूँ?
अधिकतम

12
माना; NaNs की गैर-शुद्धतावाद ने पायथन जैसी भाषाओं के लिए दर्द का कोई अंत नहीं बनाया है, इसकी समानता आधारित संगोष्ठी के साथ। जब आप इसके शीर्ष पर कंटेनर बनाने का प्रयास कर रहे हों, तो आप वास्तव में समानता को एक समतुल्य संबंध नहीं बनाना चाहते। और समानता की दो अलग-अलग धारणाएँ होना एक दोस्ताना विकल्प के रूप में ज्यादा नहीं है, ऐसी भाषा के लिए जिसे सीखना आसान होना चाहिए। परिणाम (पायथन के मामले में) आईईईई 754 के संबंध में एक अप्रिय नाजुक समझौता है और न ही-टूटी हुई रोकथाम शब्दार्थ भी है। सौभाग्य से, NaNs को कंटेनरों में रखना दुर्लभ है।
मार्क डिकिंसन

5
यहाँ कुछ अच्छी टिप्पणियों: bertrandmeyer.com/2010/02/06/…
मार्क डिकिन्सन

6
@StephenCanon: किस तरह से (0/0) == (+ INF) + (-INF) होने से अधिक निरर्थक होगा 1f/3f == 10000001f/30000002f? फ्लोटिंग प्वाइंट मूल्यों तुल्यता कक्षाओं माना जाता है, तो a=bमतलब है "संगणना जो झुकेंगे नहीं है aऔर bअनंत परिशुद्धता के साथ किया है, समान परिणाम प्राप्त करेगी", बल्कि "क्या के बारे में जाना जाता है aके बारे में जाना जाता है के साथ मैच अप b"। यदि आप कोड के किसी भी उदाहरण के बारे में जानते हैं, तो मैं उत्सुक हूं जहां "नान! = NaN" चीजों को सरल बनाता है, क्योंकि वे अन्यथा नहीं होते हैं?
सुपरकैट

5
सैद्धांतिक रूप से, यदि आपके पास NaN == NaN और noNaN नहीं है, तो आप अभी भी NaN के लिए परीक्षण कर सकते हैं !(x < 0 || x == 0 || x > 0), लेकिन यह तुलना में धीमा और अनाड़ी होगा x != x
user2357112

50

NaN को एक अपरिभाषित अवस्था / संख्या के रूप में माना जा सकता है। 0/0 की अवधारणा के समान नहीं है अपरिभाषित या sqrt (-3) (वास्तविक संख्या प्रणाली में जहां फ्लोटिंग पॉइंट रहता है)।

NaN का उपयोग इस अपरिभाषित स्थिति के लिए प्लेसहोल्डर के रूप में किया जाता है। गणितीय रूप से, अपरिभाषित अपरिभाषित के बराबर नहीं है। न तो आप कह सकते हैं कि एक अपरिभाषित मूल्य किसी अन्य अपरिभाषित मूल्य से अधिक या कम है। इसलिए सभी तुलनाएँ झूठी होती हैं।

यह व्यवहार उन मामलों में भी फायदेमंद है जहां आप sqrt (-3) की तुलना sqrt (-2) से करते हैं। वे दोनों NaN लौटाएंगे, लेकिन वे समान मूल्य होने के बावजूद वापस नहीं आएंगे। इसलिए समानता होना हमेशा NaN के साथ व्यवहार करते समय झूठी वापसी करना वांछित व्यवहार है।


5
Sqrt (1.00000000000000022) == sqrt (1.0) का परिणाम क्या होना चाहिए? कैसे (1E308 + 1E308-1E308-1E308-1E308) == (1E308 + 1E308) के बारे में कैसे? इसके अलावा, छह तुलनाओं में से केवल पांच झूठी हैं। !=ऑपरेटर सच देता है। बीत रहा है NaN==NaNऔर NaN!=NaNदोनों वापसी झूठी कोड है कि एक्स तुलना की अनुमति होगी और y चयन करने के लिए जब दोनों ऑपरेंड या तो का चयन करके NaN हैं कि क्या होने चाहिए ==या !=
सुपरकैट

38

अभी तक एक और सादृश्य में फेंकने के लिए। अगर मैं आपको दो बक्से सौंपता हूं, और आपको बताऊंगा कि उनमें से कोई भी सेब नहीं है, तो क्या आप मुझे बताएंगे कि बक्से में एक ही चीज होती है?

NaN में कुछ भी नहीं है, बस इसके बारे में कोई जानकारी नहीं है। इसलिए इन तत्वों को निश्चित रूप से बराबर नहीं कहा जा सकता है।


6
सभी खाली सेट समान हैं, परिभाषा के अनुसार।
एमएसलटर्स

28
आपके द्वारा दिए गए बक्से खाली नहीं हैं।
जॉन स्मिथ

7
क्या आप मुझे बताएंगे कि बक्से में समान चीज़ नहीं है? मैं इसके लिए तर्क को समझ सकता हूं (NaN==Nan)==false। मुझे समझ में नहीं आ रहा है के लिए तर्क है (Nan!=Nan)==true
सुपरकैट

3
मेरा मानना ​​है कि NaN! = NaN सत्य है क्योंकि x! = Y को इस रूप में परिभाषित किया गया है! (X == y)। दी, मुझे नहीं पता कि IEEE कल्पना इसे इस तरह परिभाषित करती है या नहीं।
केफ शेक्टर

6
लेकिन इस सादृश्य में, यदि आपने मुझे एक बॉक्स दिया है, तो कहा कि इसमें सेब नहीं था, फिर मुझसे पूछा कि क्या यह खुद के बराबर है, तो आप मुझसे यह कहेंगे कि नहीं? क्योंकि ऐसा मुझे IEEE के अनुसार कहना होगा।
अर्धविराम

12

NaN पर विकिपीडिया लेख से , निम्न प्रथाओं के कारण NaN हो सकता है:

  • कम से कम एक ऑपरेंड के रूप में एक NaN के साथ सभी गणितीय संचालन>
  • विभाजन 0/0, ∞ /,, ∞ /-,, -∞ /,, और -∞ / -/0
  • गुणन 0 × × और 0 × -lic
  • परिवर्धन add + (-∞), (-+) + equivalent और समकक्ष घटाव।
  • अपने डोमेन के बाहर के तर्कों पर एक फ़ंक्शन लागू करना, जिसमें एक ऋणात्मक संख्या का वर्गमूल लेना, एक ऋणात्मक संख्या का लघुगणक लेना, 90 डिग्री (या π / 2 रेडियन) के विषम गुणक की स्पर्शरेखा लेना, या उलटा साइन लेना है। या उस संख्या का कोसाइन जो -1 से कम या 1 से अधिक है।

चूंकि यह जानने का कोई तरीका नहीं है कि इनमें से किस ऑपरेशन ने NaN बनाया है, इसलिए उनकी तुलना करने का कोई तरीका नहीं है जो समझ में आता है।


3
इसके अलावा, भले ही आप जानते हों कि कौन सा ऑपरेशन, यह मदद नहीं करेगा। मैं ऐसे किसी भी सूत्र का निर्माण कर सकता हूं जो किसी बिंदु पर 0/0 पर जाता है, जिसमें (यदि हम निरंतरता मानते हैं) उस बिंदु पर अच्छी तरह से परिभाषित और विभिन्न मूल्य हैं।
डेविड थॉर्नले

4

मैं डिजाइन तर्क नहीं जानता, लेकिन यहाँ IEEE 754-1985 मानक का एक अंश है:

"सभी समर्थित स्वरूपों में फ़्लोटिंग-पॉइंट संख्याओं की तुलना करना संभव होगा, भले ही ऑपरेंड के प्रारूप भिन्न हों। तुलनाएँ सटीक और कभी अतिप्रवाह नहीं हैं। चार पारस्परिक रूप से अनन्य संबंध संभव हैं: से कम, बराबर, अधिक से अधिक और अनियंत्रित। अंतिम मामला तब उत्पन्न होता है जब कम से कम एक ऑपरेंड NaN होता है। प्रत्येक NaN स्वयं सहित, हर चीज के साथ अनियंत्रित तुलना करेगा। "


2

यह केवल अजीब लग रहा है क्योंकि अधिकांश प्रोग्रामिंग वातावरण जो NaNs को 3-मूल्यवान तर्क की अनुमति नहीं देते हैं। यदि आप मिश्रण में 3-मूल्यवान तर्क फेंकते हैं, तो यह सुसंगत हो जाता है:

  • (2.7 == 2.7) = सत्य
  • (2.7 == 2.6) = असत्य
  • (2.7 == NaN) = अज्ञात
  • (NaN == NaN) = अज्ञात

यहां तक ​​कि .NET एक bool? operator==(double v1, double v2)ऑपरेटर प्रदान नहीं करता है , इसलिए आप अभी भी मूर्ख (NaN == NaN) = falseपरिणाम के साथ फंस गए हैं ।


1

मैं अनुमान लगा रहा हूं कि NaN (नॉट ए नंबर) का ठीक यही अर्थ है: यह एक संख्या नहीं है और इस तरह इसकी तुलना करने से वास्तव में कोई मतलब नहीं है।

यह nullऑपरेंड के साथ SQL में अंकगणित जैसा है: वे सभी परिणाम में हैं null

फ़्लोटिंग पॉइंट संख्याओं की तुलना संख्यात्मक मानों से की जाती है। इस प्रकार, उनका उपयोग गैर संख्यात्मक मूल्यों के लिए नहीं किया जा सकता है। NaN इसलिए एक संख्यात्मक अर्थ में तुलना नहीं की जा सकती।


3
"यह एक संख्या नहीं है और इस तरह इसकी तुलना करने से वास्तव में कोई मतलब नहीं है।" स्ट्रिंग्स संख्या नहीं हैं, लेकिन उनकी तुलना करना समझ में आता है।
जेसन

2
हाँ, एक स्ट्रिंग को स्ट्रिंग से तुलना करना समझ में आता है। लेकिन, सेब, कहते हैं, एक स्ट्रिंग की तुलना करने का कोई मतलब नहीं है। चूंकि सेब और नाशपाती संख्या नहीं हैं, क्या उनकी तुलना करना समझ में आता है? कौन सा अधिक है?
डैरन थॉमस

@DarenThomas: SQL में, "IF NULL = NULL THEN FOO;" न ही "अगर नल <> नल को बुलाओ;" [या जो भी वाक्य रचना है] निष्पादित करेगा FOO। समतुल्य होने के लिए NaN if (NaN != NaN) foo();निष्पादित नहीं होना चाहिए foo, लेकिन यह करता है।
सुपरकैट

1

अति सरलीकृत उत्तर यह है कि एक NaN का कोई संख्यात्मक मान नहीं है, इसलिए इसमें किसी भी चीज़ की तुलना करने के लिए कुछ भी नहीं है।

यदि आप चाहते हैं कि आप अपने NaN को + INF से बदलने और बदलने के लिए परीक्षण कर सकते हैं, तो आप उन्हें + INF की तरह कार्य कर सकते हैं।


0

जबकि मैं मानता हूं कि किसी भी वास्तविक संख्या के साथ NaN की तुलना अनियंत्रित होनी चाहिए, मुझे लगता है कि NaN की खुद से तुलना करने का सिर्फ एक कारण है। उदाहरण के लिए, कोई व्यक्ति NaNs और शांत NaN के बीच के अंतर की खोज कैसे करता है? यदि हम बूलियन मानों के एक सेट (यानी एक बिट-वेक्टर) के रूप में संकेतों के बारे में सोचते हैं, तो एक अच्छी तरह से पूछ सकता है कि बिट-वैक्टर समान हैं या अलग-अलग हैं और तदनुसार सेट का आदेश देते हैं। उदाहरण के लिए, अधिकतम पक्षपाती प्रतिपादक को डिकोड करने पर, यदि बाइनरी प्रारूप के सबसे महत्वपूर्ण बिट पर महत्व के सबसे महत्वपूर्ण बिट को संरेखित करने के लिए महत्व छोड़ दिया गया था, तो एक नकारात्मक मान एक शांत NaN होगा और कोई सकारात्मक मान होगा एक संकेतन NaN हो। पाठ्यक्रम का शून्य अनंत के लिए आरक्षित है और तुलना अनियंत्रित होगी। एमएसबी संरेखण विभिन्न द्विआधारी प्रारूपों से भी संकेतों की प्रत्यक्ष तुलना के लिए अनुमति देगा। संकेतों के एक ही सेट के साथ दो NaN इसलिए समतुल्य होंगे और समानता को अर्थ देंगे।


-1

मेरे लिए, इसे समझाने का सबसे आसान तरीका है:

मेरे पास कुछ है और अगर यह सेब नहीं है तो क्या यह नारंगी है?

आप NaN की तुलना किसी और चीज़ (यहाँ तक कि) से नहीं कर सकते क्योंकि इसका कोई मूल्य नहीं है। इसके अलावा यह किसी भी मूल्य (एक संख्या को छोड़कर) हो सकता है।

मेरे पास कुछ है और अगर यह संख्या के बराबर नहीं है तो क्या यह एक स्ट्रिंग है?


आपका क्या मतलब है "यह एक संख्या को छोड़कर किसी भी मूल्य हो सकता है"?
पुशकिन

-2

क्योंकि गणित वह क्षेत्र है जहाँ संख्याएँ "बस मौजूद हैं"। कंप्यूटिंग में आपको उन नंबरों को इनिशियलाइज़ करना होगा और अपनी ज़रूरतों के अनुसार उनका स्टेट रखना होगा। उन पुराने दिनों में मेमोरी इनिशियलाइज़ेशन उन तरीकों पर काम करता था जिन पर आप कभी भरोसा नहीं कर सकते थे। आप कभी भी अपने आप को इस बारे में सोचने की अनुमति नहीं दे सकते हैं "ओह, जो कि हर समय 0xCD के साथ शुरू हो जाएगा, मेरा अहंकार नहीं टूटेगा"

इसलिए आपको उचित नॉन-मिक्सिंग सॉल्वेंट की आवश्यकता होती है जो आपके एल्गोरिथ्म को बेकार और टूटे हुए न होने देने के लिए पर्याप्त चिपचिपा हो । संख्याओं को शामिल करने वाले अच्छे एल्गोरिदम ज्यादातर संबंधों के साथ काम करने जा रहे हैं, और यदि () संबंधों को छोड़ दिया जाएगा।

यह सिर्फ ग्रीस है जिसे आप कंप्यूटर मेमोरी से रैंडम हेल की प्रोग्रामिंग करने के बजाय, नए वेरिएबल में डाल सकते हैं। और आपका एल्गोरिथ्म जो भी है, वह नहीं टूटेगा।

अगला, जब आप अभी भी अचानक पता लगा रहे हैं कि आपका एल्गोरिथ्म NaNs का उत्पादन कर रहा है, तो इसे साफ करना संभव है, एक बार में प्रत्येक शाखा को देखते हुए। फिर, "हमेशा झूठा" नियम इसमें बहुत मदद कर रहा है।


-4

बहुत छोटा जवाब:

क्योंकि निम्नलिखित: nan / nan = 1 पकड़ नहीं होना चाहिए। नहीं inf/infतो 1 होगा।

(इसलिए के nanबराबर नहीं हो सकता है nan>या के रूप में <, अगर, nanआर्किमिडीयन संपत्ति को संतुष्ट करने वाले सेट में किसी भी आदेश संबंध का सम्मान करेगा , तो हम फिर nan / nan = 1से सीमा पर होंगे)।


2
नहीं, इसका कोई मतलब नहीं है। हमारे पास inf = infऔर है inf / inf = nan, इसलिए या तो nan = nanनहीं रोका जाएगा nan / nan = nan
स्टारबेल

@starblue तुम्हारा मतलब है nan / nan = 1? वैसे भी ... आपका तर्क समझ में आता है कि यदि inf और nan किसी अन्य संख्या के समान थे। ऐसा नहीं है। इसका कारण (या गणित में अनिश्चित रूप) inf/infहोना चाहिए nanऔर 1साधारण बीजगणितीय हेरफेर की तुलना में अधिक सूक्ष्म नहीं है (देखें डी लाहर्स प्रमेय देखें)।
SeF
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.