2009-04-17 14 views
17

क्या डबल (एक उचित मंटिसा/एक्सपोनेंट बैलेंस के साथ बाइट्स की एक निर्दिष्ट संख्या में) हमेशा बाइट्स की संख्या के आधे हस्ताक्षर किए गए पूर्णांक की सीमा को पूरी तरह ठीक से पकड़ सकता है?युगल में पूर्णांक का प्रतिनिधित्व

उदा। एक आठ बाइट डबल पूरी तरह सटीक रूप से चार बाइट हस्ताक्षरित int की संख्या को पकड़ सकता है?

यह क्या होगा यदि यह दो बाइट फ्लोट एक बाइट हस्ताक्षरित int की सीमा को पकड़ सकता है।

एक एक बाइट निश्चित रूप से अहस्ताक्षरित int इच्छा हो 0 -> 255

उत्तर

35

एक IEEE754 64-बिट डबल किसी भी 32-बिट पूर्णांक का प्रतिनिधित्व कर सकते हैं, क्योंकि यह 53 के करीब बिट्स परिशुद्धता और 32 के लिए उपलब्ध है -बीटी पूर्णांक केवल जरूरत है, ठीक है, 32 :-)

यह (गैर आईईईई 754 डबल परिशुद्धता) 64-बिट फ्लोटिंग पॉइंट नंबर के लिए सटीक 32 बिट्स से कम होने के लिए व्यावहारिक होगा। इससे वास्तव में बड़ी संख्या (एक्सपोनेंट के कारण) की अनुमति होगी लेकिन परिशुद्धता की लागत पर।

नीचे की रेखा यह है कि, पूर्णांक में (और इसे स्केल करने के लिए एक्सपोनेंट में पर्याप्त बिट्स) की तुलना में फ्लोटिंग पॉइंट नंबर के मंथिसा में परिशुद्धता के अधिक बिट्स प्रदान किए जाते हैं, फिर इसे बिना किसी नुकसान के प्रदर्शित किया जा सकता है परिशुद्धता का

-3

फ़्लोटिंग-पॉइंट नंबरों के बारे में बात करते समय मैं "पूरी तरह सटीक" शब्दों का उपयोग नहीं करूंगा। लेकिन हाँ, double 32-बिट पूर्णांक का प्रतिनिधित्व कर सकता है।

मुझे नहीं पता कि फ्लोट्स और इनट्स के अन्य संयोजन जो यह भी सच है।

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

+1

एक फ़्लोटिंग-पॉइंट नंबर निश्चित रूप से कुछ संख्याओं का प्रतिनिधित्व कर सकता है, और उनमें से सभी पूर्णांक हैं जो इसकी परिशुद्धता के भीतर फिट होते हैं। एक बार जब आप विभाजन करना शुरू कर देते हैं, या गुणा जो ओवरफ्लो का कारण बन सकता है, तो संभवतः आपने सटीकता खो दी है। न ही सभी के पास bignums और/या तर्कसंगत संख्याओं के लिए एक आसान प्रणाली है। –

6

हां। एक फ्लोट (या डबल) को किसी भी पूर्णांक का प्रतिनिधित्व करने की गारंटी दी जाती है जिसे छोटा करने की आवश्यकता नहीं होती है। एक डबल के लिए, सटीक 53 बिट्स हैं, इसलिए यह किसी भी 32 बिट पूर्णांक का प्रतिनिधित्व करने के लिए पर्याप्त है, और 64 बिट वाले लोगों का एक छोटा (सांख्यिकीय रूप से बोलने वाला) अनुपात भी है।

2

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

+0

क्या कोई 52-बिट मंटिसा के साथ बिल्कुल 53-बिट (52-बिट नहीं) पूर्णांक का प्रतिनिधित्व करने में सक्षम नहीं होगा, क्योंकि द्विआधारी बिंदु के बाईं ओर अंतर्निहित बिट की वजह से? – Apriori

-1

डबल काम करने के तरीके के बारे में अधिक जानकारी के लिए, आप इस ब्लॉग पोस्ट को देखना चाहेंगे: Anatomy of a floating point number