[c++] सी + + फ्लोट डिवीजन और प्रेसिजन



Answers

मुझे यह भी पता है कि फ्लोट की सटीकता 7 अंक है

नहीं। सबसे सामान्य फ्लोटिंग प्वाइंट फॉर्मेट बाइनरी है और इसमें 24 बिट्स की सटीकता है। यह कहीं 6 और 7 दशमलव अंकों के बीच होता है, लेकिन आप दशमलव में नहीं सोच सकते हैं यदि आप यह समझना चाहते हैं कि गोलाकार काम कैसे होता है।

जैसा कि बी 2 की शक्ति है, सी बिल्कुल प्रतिनिधित्व योग्य है। यह दशमलव के प्रतिनिधित्व में रूपांतरण के दौरान होता है, जिसमें गोलाकार होता है। दशमलव प्रतिनिधित्व प्राप्त करने के मानक तरीकों को गोलाई के बजाए ट्रांस्केशन का उपयोग करने की संभावना नहीं है। एक तरह से एक और अंक के लिए पूछना और इसे अनदेखा करना होगा।

लेकिन ध्यान दें कि तथ्य यह है कि ग वास्तव में प्रतिनिधित्व योग्य है इसकी मूल्य की संपत्ति है। कुछ जाहिरा तौर पर सरल मूल्य (जैसे 0.1) में बाइनरी एफपी प्रारूपों में सटीक प्रतिनिधित्व नहीं है।

Question

मुझे पता है कि 511 से विभाजित 511 वास्तव में 0.9 9 8046875 के बराबर है। मुझे यह भी पता है कि फ्लोट की सटीकता 7 अंक है मेरा प्रश्न यह है, जब मैं सी ++ (जीसीसी) में यह गणित करता हूं तो मुझे मिलेगा परिणाम 0.998047, जो एक गोल वैल्यू है I मैं 0.998046 का छोटा मूल्य प्राप्त करना चाहता हूं, मैं यह कैसे कर सकता हूं?

  float a = 511.0f;
  float b = 512.0f;
  float c = a / b;



आपका प्रश्न अद्वितीय नहीं है, इससे पहले कई गुना उत्तर दिए गए हैं। यह एक सरल विषय नहीं है और सिर्फ इसलिए कि उत्तर पोस्ट किए जाने का मतलब यह नहीं है कि वे अच्छी गुणवत्ता के होंगे। यदि आप थोड़ा ब्राउज़ करते हैं तो आपको वास्तव में अच्छी चीजें मिल जाएंगी। और इससे आपको कम समय लगेगा

मैं शर्त लगा सकता हूं कि कोई व्यक्ति टिप्पणी करने और उत्तर देने के लिए -1 नहीं होगा।

_____ संपादित करें _____

अस्थायी बिंदु को समझने के लिए मौलिक क्या है यह एहसास करना है कि सब कुछ बाइनरी अंकों में प्रदर्शित होता है। चूंकि ज्यादातर लोगों को यह समझने में परेशानी होती है, इसलिए वे इसे दशमलव अंकों के नज़रिए से देखने की कोशिश करते हैं।

511/512 के विषय पर आप मूल्य 1.0 को देखकर शुरू कर सकते हैं। फ्लोटिंग प्वाइंट में यह i.000000 ... * 2 ^ 0 या इंटिटल बिट सेट (1) के बराबर 2 ^ 0 या 1 के बराबर के रूप में व्यक्त किया जा सकता है। चूंकि 511/512 1 से कम है, आपको अगले से शुरू करना होगा कम बिजली -1- i.000000 दे रही है ... * 2 ^ -1 यानी 0.5। ध्यान दें कि केवल एक चीज जो बदल गई है वह एक्सपोनेंट है अगर हम 511 में द्विआधारी को व्यक्त करना चाहते हैं तो हमें 9 वाले - 111111111 या फ्लोटिंग प्वाइंट के साथ में अंतर्निहित बिट i.11111111 - जो हम 512 से विभाजित कर सकते हैं और 1 के i.1111111100 देकर -1 के एक्सपोनेंट के साथ जोड़ सकते हैं। * 2 ^ -1।

यह 0.9 9 8046875 का अनुवाद कैसे करता है?

अंतर्निहित बिट से शुरू करने के लिए अच्छी तरह से 0.5 (या 2 ^ -1) का प्रतिनिधित्व करता है, पहली स्पष्ट बिट 0.25 (2 ^ -2), अगले स्पष्ट बिट 0.125 (2 ^ -3), 0.0625, 0.03125 और इतने पर जब तक आप ' हमने नौवें बिट (आठवें स्पष्ट) का प्रतिनिधित्व किया है उन्हें जमा करें और आपको 0.9 9 8046875 मिलता है। I.11111111 से हम पाते हैं कि यह संख्या 9 बाइनरी अंक सटीकता का प्रतिनिधित्व करती है और, संयोग से, 9 दशमलव शुद्धता।

यदि आप 512/512 से 512 गुणा करते हैं, तो आपको i1111111100 ... * 2 ^ 8 मिलेगा। यहां सटीक के समान नौ बाइनरी अंक हैं लेकिन केवल तीन दशमलव अंक (511 के लिए)।

I.11111111111111111111111 पर विचार करें (i + 23 वाले) * 2 ^ -1 हमें 24 द्विआधारी और 24 दशमलव अंकों की परिशुद्धता के साथ एक अंश (2 ^ (24-1) ^ / (2 ^ 24)) मिलेगा। सभी 24 दशमलव अंकों के उपयुक्त प्रिंटफ़ स्वरूपण को प्रदर्शित किया जाएगा। 2 ^ 24 तक गुणा करें और आपके पास 24 बाइनरी अंक सटीक हैं, लेकिन केवल 8 दशमलव (16777215 के लिए)

अब i.1111100 पर विचार करें ... * 2 ^ 2 जो 7.875 से बाहर आता है। i11 पूर्णांक भाग है और 111 अंश भाग (111/1000 या 7/8 वें) है। 6 द्विआधारी अंक सटीकता और 4 दशमलव

फ़्लोटिंग-पॉइंट करते समय दशमलव सोचते हुए इसे समझने में काफी हानिकारक होता है स्वयं को मुक्त करो!






Links