2011-10-30 22 views
19

पर विचार करें निम्नलिखित सी ++ कोड:नकारात्मक शून्य फ्लोटिंग पॉइंट मान के लिए उपयोग करता है?

double someZero = 0; 
std::cout << 0 - someZero << '\n'; // prints 0 
std::cout << -someZero << std::endl; // prints -0 

सवाल उठता है: के लिए नकारात्मक शून्य अच्छा क्या है, और यह रक्षा से बचा जाना चाहिए (अर्थात उपयोग घटाव के बजाय एक चर पर एक शून्य से मारना)? जब जटिल संख्याओं से निपटने ...

हर रोज इस्तेमाल में एक ज्यादातर नकारात्मक शून्य से बचना चाहिए

+0

कहान के मौलिक पेपर के लिंक के लिए http://en.wikipedia.org/wiki/Signed_zero –

उत्तर

0

नकारात्मक शून्य कुछ का उपयोग उदाहरण के लिए है।

20

विकिपीडिया से:

यह दावा किया जाता है कि आईईईई 754 में हस्ताक्षर किए शून्य के शामिल किए जाने से यह बहुत आसान कुछ महत्वपूर्ण समस्याओं [1] में संख्यात्मक सटीकता प्राप्त करने के लिए बनाता है, विशेष रूप से जब परिसर के साथ कंप्यूटिंग प्राथमिक कार्य [2]।

पहला संदर्भ "जटिल प्राथमिक कार्य या बहुत हलचल के बारे में कुछ भी नहीं के साइन बिट के लिए शाखा कटौती" डब्ल्यू कहां से है, जो डाउनलोड here लिए उपलब्ध है।

उस पेपर से एक उदाहरण 1/(+0) बनाम 1/(-0) है। यहां, शून्य का संकेत एक बड़ा अंतर बनाता है, क्योंकि पहली अभिव्यक्ति +inf और दूसरी, -inf के बराबर होती है।

+2

+1। – njuffa

+0

मुझे हनक्सवाइटर के साथ लिखे दस्तावेज़ों से प्यार है। ;-) – Phil

+0

हालांकि यह व्याख्या नहीं करता है कि प्रोग्रामिंग भाषा में हस्ताक्षर किए गए शून्य का उपयोग किस प्रकार किया गया है। –

0

केवल दो असली उपयोग-मामले कि मैं देख सकते हैं:

  1. आप पता चलता है कि एक मूल्य के नकारात्मक लेकिन बहुत बहुत छोटे (शायद infinitessimal) है चाहता हूँ, यानी बहुत छोटा एक नाव के रूप में प्रतिनिधित्व करने के लिए या डबल।
  2. आप गणित के साथ काम कर रहे हैं जो केवल नकारात्मक की अनुमति देता है, लेकिन फिर भी शून्य प्रदर्शित करना चाहता है। भौतिकी, जटिल संख्याओं और संख्या सिद्धांत में कुछ मामले हैं जहां यह उपयोगी हो सकता है।

अधिकांश भाग के लिए, यह उपयोगी नहीं है और इससे बचा जाना चाहिए।

आप इस प्रश्न को भी देखना चाहते हैं: Is there a negative zero? और IEEE 754 spec फ़्लोटिंग पॉइंट के लिए।

3

अलावा के लिए हस्ताक्षर किए शून्य अच्छा में:

शून्यों विस्तारित वास्तविक संख्या रेखा ऐसी है कि 1/-0 का एक प्रकार = -∞ और 1/+ 0 = + ∞, प्रभाग द्वारा के रूप में माना जा सकता है शून्य केवल ± 0/± 0 के लिए अपरिभाषित है।

नकारात्मक हस्ताक्षरित शून्य एक तरफा सीमा के रूप में नीचे से 0 तक पहुंचने की गणितीय विश्लेषण अवधारणा को छूता है, जिसे x → 0-, x → 0-, या x → ↑ 0 द्वारा दर्शाया जा सकता है। नोटेशन "-0" को अनौपचारिक रूप से शून्य पर गोल करने वाले छोटे नकारात्मक नंबर को इंगित करने के लिए उपयोग किया जा सकता है। नकारात्मक शून्य की अवधारणा में सांख्यिकीय मैकेनिक्स और अन्य विषयों में कुछ सैद्धांतिक अनुप्रयोग भी हैं

+2

मुझे आश्चर्य है कि क्या यह तीन शून्यों के लिए उपयोगी होगा: सकारात्मक, नकारात्मक, और हस्ताक्षरित, दो नकारात्मक संख्याओं के घटाव के साथ, या विपरीत संख्या और बराबर परिमाण की दो संख्याओं के अतिरिक्त, एक हस्ताक्षरित शून्य उत्पन्न करना? एक हस्ताक्षरित शून्य द्वारा डिवीजन को अनंतता मिलनी चाहिए, लेकिन एक हस्ताक्षरित शून्य द्वारा विभाजन को NaN उत्पन्न करना चाहिए। – supercat

0

मैं एक मापने वाला ऐप बना रहा हूं, और -0 मिश्रित संख्याओं (जैसे पैर और इंच में अलग) के लिए बहुत उपयोगी है।

कल्पना कीजिए कि हमारे पास एक चर "लंबाई" है जिसे हम "पैर" और "इंच" में अलग करने की कोशिश कर रहे हैं।

(यह जावा कोड है, लेकिन एक ही विचार सी ++ के लिए सच है)।

feet = Math.signum(length) * Math.floor(Math.abs(length/12)); 
// could also do feet = length>0 ? Math.floor(length/12) : Math.ceil(length/12) 
inches = Math.abs(length) % 12; 

यदि लंबाई -1 फीट और 0 फीट के बीच है, तो हम इसे पैर के लिए कहना चाहते हैं -0 हम जानते हैं कि यह नकारात्मक है।

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