(नोट: मैं यहां द्विआधारी संख्या इंगित करने के लिए 'बी' जोड़ूंगा। अन्य सभी संख्याएं दशमलव में दी गई हैं)
चीजों के बारे में सोचने का एक तरीका वैज्ञानिक संकेतन जैसी चीज के संदर्भ में है। हम वैज्ञानिक संकेतन में व्यक्त संख्याओं को देखने के आदी हैं, जैसे 6.022141 * 10 ^ 23। फ्लोटिंग पॉइंट नंबरों को आंतरिक रूप से एक समान प्रारूप - मंटिसा और एक्सपोनेंट का उपयोग करके संग्रहीत किया जाता है, लेकिन दस के बजाय दो की शक्तियों का उपयोग करना।
आपकी 61.0 को 1.90625 * 2 ^ 5, या 1.11101b * 2 ^ 101b के रूप में मंटिसा और एक्सपोर्टर के साथ फिर से लिखा जा सकता है। इसे दस से गुणा करने और (दशमलव बिंदु को स्थानांतरित करने के लिए), हम कर सकते हैं:
(1.90625 * 2 ^ 5) * (1.25 * 2 ^ 3) = (2.3828125 * 2 ^ 8) = (1.19140625 * 2 ^ 9)
या बाइनरी में मंटिसा और एक्सपोर्टर के साथ:
(1.11101b * 2 ^ 101b) * (1.01b * 2 ^ 11b) = (10.0110001b * 2 ^ 1000b) = (1.00110001b * 2 ^ 1001b)
ध्यान दें कि हमने संख्याओं को गुणा करने के लिए वहां क्या किया था। हमने मंत्रों को गुणा किया और घातांक को जोड़ा। फिर, चूंकि मंटिसा दो से अधिक समाप्त हो गई, इसलिए हमने प्रतिपादक को टक्कर देकर परिणाम को सामान्य किया। यह वैसा ही है जब हम दशमलव वैज्ञानिक अंकन में संख्याओं पर एक ऑपरेशन करने के बाद प्रतिपादक को समायोजित करते हैं। प्रत्येक मामले में, हमने जिन मूल्यों के साथ काम किया, उनमें बाइनरी में एक परिमित प्रतिनिधित्व था, और इसलिए बुनियादी गुणन और अतिरिक्त संचालन द्वारा मूल्यों का उत्पादन भी एक परिमित प्रतिनिधित्व के साथ मूल्यों का उत्पादन करता था।
अब, विचार करें कि हम 61 को 10. से कैसे विभाजित करेंगे। हम मन्तिस, 1.90625 और 1.25 को विभाजित करके शुरू करेंगे। दशमलव में, यह 1.525 देता है, एक अच्छी संख्या है। लेकिन यह क्या है अगर हम इसे बाइनरी में बदलते हैं? हम इसे सामान्य तरीके से करेंगे - जब भी संभव हो, दो की सबसे बड़ी शक्ति को घटाकर, पूर्णांक दशमलव को बाइनरी में परिवर्तित करने की तरह, लेकिन हम दो की नकारात्मक शक्तियों का उपयोग करेंगे:
1.525 - 1 * 2 ^ 0 -> 1
0.525 - 1 * 2 ^ -1 -> 1
0.025 - 0 * 2 ^ -2 -> 0
0.025 - 0 * 2 ^ -3 -> 0
0.025 - 0 * 2 ^ -4 -> 0
0.025 - 0 * 2 ^ -5 -> 0
0.025 - 1 * 2 ^ -6 -> 1
0.009375 - 1 * 2 ^ -7 -> 1
0.0015625 - 0 * 2 ^ -8 -> 0
0.0015625 - 0 * 2 ^ -9 -> 0
0.0015625 - 1 * 2 ^ -10 -> 1
0.0005859375 - 1 * 2 ^ -11 -> 1
.००००९७६५६२५ ...
उह ओह। अब हम मुश्किल में हैं। यह पता चला है कि 1.90625 / 1.25 = 1.525, द्विआधारी में व्यक्त किए जाने पर एक दोहराव वाला अंश है: 1.11101b / 1.01b = 1.10000110011 ... b हमारी मशीनों में केवल इतने सारे बिट्स हैं जो उस मंटिसा को पकड़ सकते हैं और इसलिए वे बस अंश को गोल करेंगे और एक निश्चित बिंदु से परे शून्य मान लेते हैं। जब आप 61 को 10 से विभाजित करते हैं तो जो त्रुटि दिखाई देती है, वह अंतर है:
1.1000011001100110011001100110011001100110011 ... b * 2 ^ 10b
और, कहो:
1.100001100110011001100110b * 2 ^ 10b
यह मंटिसा का यह दौर है जो सटीकता के नुकसान की ओर जाता है जिसे हम फ्लोटिंग पॉइंट वैल्यू के साथ जोड़ते हैं। यहां तक कि जब मंटिसा को बिल्कुल व्यक्त किया जा सकता है (उदाहरण के लिए, केवल दो संख्याओं को जोड़ते हुए), हम अभी भी संख्यात्मक नुकसान प्राप्त कर सकते हैं यदि प्रतिपादक को सामान्य करने के बाद मंटिसा को फिट होने के लिए कई अंकों की आवश्यकता होती है।
हम वास्तव में हर समय इस तरह की बात करते हैं जब हम दशमलव संख्या को एक प्रबंधनीय आकार में गोल करते हैं और इसके पहले कुछ अंक देते हैं। क्योंकि हम दशमलव में परिणाम को व्यक्त करते हैं, यह स्वाभाविक लगता है। लेकिन अगर हम एक दशमलव को गोल करते हैं और फिर इसे एक अलग आधार में बदल देते हैं, तो यह केवल उतने ही बदसूरत दिखेंगे जितने कि फ़्लोटिंग पॉइंट राउंडिंग के कारण हमें प्राप्त होते हैं।