2009-03-06 11 views
7

मैं सिर्फ एक डबल के मूल्य को मुद्रित करने के लिए जीडीबी का उपयोग कर रहा था और मुझे आश्चर्य हुआ कि यह मुद्रित -0सी: डबल के लिए == -0 होने का क्या अर्थ है?

सी में -0 मान का डबल क्या है?

वैसे जब मैं जाँच की 0 यह सच लौटे साथ यह समानता है: तुलना मैं सिर्फ gdb में निम्नलिखित

किया ऐसा करने के लिए

> print some_double 
-0 
> print some_double == 0 
1 

उत्तर

16

Negative zero संख्यात्मक कंप्यूटिंग के लिए एक उपयोगी अवधारणा है और है सी

3

में एक वैध फ़्लोटिंग पॉइंट नंबर यह printf के साथ एक प्रसिद्ध मुद्दा है। चूंकि आप एक फ्लोटिंग पॉइंट नंबर का उपयोग कर रहे हैं, बाइनरी में कोई भी प्रतिनिधित्व संभव नहीं है। और अधिकांश बार द्विआधारी प्रतिनिधित्व सही नहीं है। इसलिए, 0 को कभी-कभी 0.00000000000000...0042 और -0.000000000000000000000123 के रूप में संग्रहीत किया जाता है। जब printf दूसरे को प्रिंट करता है, तो आपको विषम -0 मिल जाता है।

मुझे वास्तव में पता नहीं है कि आप 0 के खिलाफ तुलना कैसे कर रहे हैं, बस विषमता के समायोजन के लिए फ़्लोटिंग पॉइंट तुलना करते समय एक ईपीएसलॉन जोड़ना याद रखें। E.g: परीक्षण करने के लिए कि क्या दो फ्लोट बराबर हैं a == b लिखें लेकिन fabs(a-b) < 1e-13 जहां 1e-13 ईपीएसलॉन है (एक एक्सपोनेंट चुनें जो आपको उपयुक्त बनाता है)।

+0

मैं जोड़ा कैसे मैं तुलना – hhafez

+0

किया आपको लगता है कि gdb printf है के लिए यह प्रिंट बयान है? – hhafez

+0

हाँ, वे सभी प्रोग्राम एक ही libc का उपयोग करते हैं। – dirkgently

2

वास्तव में अध्याय 4 में "महान कोड, वॉल्यूम 1 लिखना" पुस्तक पढ़ना लेखक लेखक को स्पष्ट रूप से उत्तर देता है कि यह आईईईई एफपी मानक में हस्ताक्षरित फ्लोट का प्रतिनिधित्व करने के लिए 1 के पूरक के उपयोग के कारण है। वह कहता है:

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

जोर मेरा

+0

आईईईई फ़्लोटिंग-पॉइंट साइन और वैल्यू (और एक्सपोनेंट) का उपयोग करता है, न कि पूरक। (इसके अलावा, अंश एक महत्व है, मंटिसा नहीं।) –

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