मैंने पढ़ा है कि वे मंटिसा के रूप में संग्रहीत हैं और एक्सपोनेंटस्मृति में फ़्लोटिंग पॉइंट नंबर कैसे संग्रहीत किए जाते हैं?
मैंने this document पढ़ा है लेकिन मुझे कुछ भी समझ नहीं आया।
मैंने पढ़ा है कि वे मंटिसा के रूप में संग्रहीत हैं और एक्सपोनेंटस्मृति में फ़्लोटिंग पॉइंट नंबर कैसे संग्रहीत किए जाते हैं?
मैंने this document पढ़ा है लेकिन मुझे कुछ भी समझ नहीं आया।
को समझने के लिए कि वे कैसे जमा हो जाती है, तो आपको पहले कि वे क्या कर रहे हैं और मूल्यों वे संभाल करने के लिए करना है कि किस तरह समझना चाहिए।
पूर्णांक के विपरीत, एक फ़्लोटिंग-पॉइंट मान का उद्देश्य बहुत कम मूल्यों के साथ-साथ बेहद बड़े पैमाने पर प्रदर्शित करना है। सामान्य 32-बिट फ़्लोटिंग-पॉइंट मानों के लिए, यह 1.175494351 * 10^-38 से 3.40282347 * 10^+ 38 से सीमा में मानों के अनुरूप है।
स्पष्ट रूप से, केवल 32 बिट्स का उपयोग करके, इस संख्या में प्रत्येक अंक को स्टोर करना संभव नहीं है।
जब प्रतिनिधित्व की बात आती है, तो आप सभी सामान्य फ़्लोटिंग-पॉइंट संख्याओं को 1.0 से (लगभग) 2.0 में मान के रूप में देख सकते हैं, जो दो की शक्ति के साथ स्केल किए गए हैं। तो 1.0 है, बस 1.0 * 2^0। 2।0 1.0 * 2^1 है। -5.0 -1.25 * 2^2 है।
तो, इसे यथासंभव कुशलता से एन्कोड करने के लिए आवश्यक है? हमें वास्तव में क्या चाहिए?
यह आईईईई -754 फ्लोटिंग-पॉइंट मानक के अनुसार निम्नानुसार एन्कोड किया गया है।
सामान्य फ्लोटिंग प्वाइंट मूल्यों के अलावा, वहाँ विशेष मूल्यों की एक संख्या में हैं। साइन बिट का उपयोग "प्लस शून्य" और "शून्य शून्य" का प्रतिनिधित्व करने के लिए किया जाता है। ऑपरेशन का परिणाम बेहद छोटा होता है, लेकिन शून्य से शून्य उपयोगी होता है, लेकिन यह जानना अभी भी महत्वपूर्ण है कि ऑपरेशन किस दिशा से आया था।
अंत में, निम्नलिखित (सभी मूल्यों हेक्स में हैं) ठोस उदाहरण के एक मुट्ठी भर है
आम आदमी के शब्दों में, यह अनिवार्य रूप से scientific notation बाइनरी में है। औपचारिक मानक (विवरण के साथ) IEEE 754 है।
+1 लेकिन विकी औपचारिक मानक नहीं है, यह औपचारिक मानक की व्याख्या में सबसे अधिक है :-) :-) – xanatos
और सी को आईईईई फ़्लोटिंग-पोइमेट की आवश्यकता नहीं है। –
typedef struct {
unsigned int mantissa_low:32;
unsigned int mantissa_high:20;
unsigned int exponent:11;
unsigned int sign:1;
} tDoubleStruct;
double a = 1.2;
tDoubleStruct* b = reinterpret_cast<tDoubleStruct*>(&a);
एक उदाहरण कैसे स्मृति की स्थापना की है, तो संकलक आईईईई 754 डबल परिशुद्धता जो सबसे सिस्टम पर एक सी डबल आज के लिए डिफ़ॉल्ट है का उपयोग करता है।
यहां यह सी आधारित बाइनरी रूप में है और इसे समझने के लिए wikipedia about double precision बेहतर पढ़ें।
यह एक संभावना है, लेकिन केवल एक ही नहीं। –
कई अलग-अलग फ़्लोटिंग-पॉइंट प्रारूप हैं। उनमें से अधिकतर कुछ सामान्य विशेषताओं को साझा करते हैं: एक साइन बिट, एक एक्सपोनेंट को स्टोर करने के लिए समर्पित कुछ बिट्स, और महत्व को संग्रहित करने के लिए समर्पित कुछ बिट्स (जिसे मंटिसा भी कहा जाता है)।
आईईईई फ़्लोटिंग-पॉइंट मानक एक प्रारूप को परिभाषित करने का प्रयास करता है (या कुछ आकारों के स्वरूपों का सेट) जिसे विभिन्न प्रणालियों पर लागू किया जा सकता है। यह उपलब्ध संचालन और उनके अर्थशास्त्र को भी परिभाषित करता है। यह काफी अच्छी तरह से पकड़ा गया है, और जिन प्रणालियों का सामना करना पड़ सकता है, वे शायद आईईईई फ्लोटिंग-पॉइंट का उपयोग कर सकते हैं। लेकिन अन्य प्रारूप अभी भी उपयोग में हैं, साथ ही पूर्ण-पूर्ण आईईईई कार्यान्वयन भी नहीं हैं। सी मानक आईईईई के लिए वैकल्पिक समर्थन प्रदान करता है, लेकिन इसे जरूरी नहीं है।
मंटिसा संख्या के सबसे महत्वपूर्ण बिट्स का प्रतिनिधित्व करता है।
एक्सपोनेंट प्रतिनिधित्व करता है कि संख्या के वास्तविक मूल्य को प्राप्त करने के लिए मंटिसा पर कितनी बदलाव की जानी है।
एन्कोडिंग निर्दिष्ट करता है कि मंटिसा का प्रतिनिधित्व कैसे किया जाता है और एक्सपोनेंट का संकेत (मूल रूप से बाएं या दाएं स्थानांतरित हो रहा है)।
आपके द्वारा संदर्भित दस्तावेज़ IEEE एन्कोडिंग निर्दिष्ट करता है, जो सबसे व्यापक रूप से उपयोग किया जाता है।
मुझे वह आलेख मिला है जिसे आपने काफी गैरकानूनी संदर्भित किया है (और मुझे पता है कि आईईईई कैसे काम करता है)। मेरा सुझाव है कि आप स्पष्टीकरण के विकी संस्करण के साथ प्रयास करें। यह काफी स्पष्ट है और विभिन्न उदाहरण है:
http://en.wikipedia.org/wiki/Single_precision और http://en.wikipedia.org/wiki/Double_precision
यह कार्यान्वयन परिभाषित किया गया है, हालांकि आईईईई -754 अब तक का सबसे आम है।
यह सुनिश्चित हो कि आईईईई-754 प्रयोग किया जाता है:
#ifdef __STDC_IEC_559__
std::numeric_limits<float>::is_iec559
स्थिरांक
दस्तावेज़ को आप से जुड़ा हुआ नहीं बल्कि स्पष्ट रूप से यह बताते हैं का उपयोग करें। आपको विशेष रूप से समझने में क्या मुश्किल लगता है? –
@ माइकलबोर्गवर्ड नहीं, यह स्पष्ट नहीं है। यह बताता है कि एक्सपोनेंट कैसे संग्रहीत किया जाता है समस्या को शुरू करने के बाद इस स्पष्टीकरण की आवश्यकता होती है ('लेकिन क्या होगा यदि संख्या शून्य है?' ... 'ओह प्रिय')। यह उन अपराध कहानियों की तरह है जहां चाल यह है कि उन्होंने आपको सभी सूचनाएं नहीं दिखायीं लेकिन कहानी में मुख्य पात्र उन्हें सभी जानता है। – xanatos