जब एक फ्लोट के रूप में प्रतिनिधित्व किया जाता है, तो आपके नंबर में 16 का एक्सपोनेंट होता है (यानी मान इसका मंथिस समय 2^16, या 65536 है)। mantisse तो हो जाता है
123456.123456/65536 = 1.8837909462890625
आदेश एक 32-बिट नाव में फिट करने के लिए, mantisse 23 बिट तक छोटा कर दिया गया है, इसलिए अब यह 1.883791
हो जाता है। जब 65536
द्वारा वापस गुणा किया गया, तो यह 123456.125
बन जाता है।
दशमलव बिंदु के बाद तीसरी स्थिति में 5
पर ध्यान दें: सी ++ की आउटपुट रूटीन जिसे आपने गोल किया है, जिससे आपका अंतिम नंबर 123456.13
जैसा दिखता है। द्विआधारी रूपांतरण के लिए (रिक रेगन की टिप्पणी)
पूर्णांकन (24 बिट के लिए) बाइनरी में पहली बार होता है, दशमलव में, और फिर दशमलव के लिए, printf
में: राउंडिंग के
संपादित स्पष्टीकरण। संग्रहीत मूल्य 1.1110001001000000001 x 2^16 = 1.8837909698486328125 x 2^16 = 123456.125 है। यह 123456.13 के रूप में प्रिंट करता है, लेकिन केवल इसलिए कि विज़ुअल सी ++ "गोल से आधा दूर" गोलिंग का उपयोग करता है।
रिक में outstanding article on the subject भी है।
यदि आप अन्य नंबरों और उनके फ्लोट प्रस्तुतियों के साथ खेलना चाहते हैं, तो यहां एक very useful IEEE-754 calculator है।
उत्तर के लिए सभी को धन्यवाद। अब मैं समझ गया। मैं बस इसे गोल करने के बजाय बिंदु के बाद असीमित अंक छोड़ना चाहिए। – Kosmos