यहाँ आपके प्रश्न की कुंजी है: 10
का उत्पाद है 2
और 5
। आप वास्तव में आधार में 10 दशमलव कश्मीर है कि * 1/2 किसी भी संख्या का प्रतिनिधित्व कर सकते n * 1/5 मीटर जहां k
, n
और m
पूर्णांक हैं।
वैकल्पिक रूप से सुव्यवस्थित - यदि संख्या n
में 1 / n में एक कारक होता है जो आधार के कारकों का हिस्सा नहीं होता है, तो संख्या बाइनरी / दशमलव / अंकों के निश्चित संख्या में बिल्कुल निश्चित संख्या में प्रतिनिधित्व नहीं कर पाएगी और जो भी इसका विस्तार होगा संख्या - इसका दोहराव हिस्सा होगा। उदाहरण के लिए 1/15 = 0.0666666666 .... क्योंकि 3 (15 = 3 * 5) 10 का कारक नहीं है।
इस प्रकार, कुछ भी जो आधार 2 में प्रतिनिधित्व करने में सक्षम है (k * 1/2 n ) आधार 10 में बिल्कुल प्रतिनिधित्व किया जा सकता है।
इसके अलावा, संख्या का प्रतिनिधित्व करने के लिए आप कितने अंकों / बिट्स का उपयोग कर रहे हैं, इसका मुद्दा है। कुछ संख्याएँ हैं जो कुछ आधार में बिल्कुल प्रतिनिधित्व करने में सक्षम हैं, लेकिन यह करने के लिए अंकों / बिट्स की संख्या से अधिक है।
बाइनरी में, संख्या 1/10 जो दशमलव में सुविधाजनक रूप से 0.1 है, को एक संख्या के रूप में प्रतिनिधित्व नहीं किया जा सकता है जिसे बाइनरी में निश्चित संख्या में बिट्स में दर्शाया जा सकता है। इसके बजाय, संख्या 0.00011001100110011 है ... 2 (0011 भाग के साथ हमेशा के लिए दोहराते हुए)।
नंबर 1 पर नज़र चलें 2 /1010 2 थोड़ा और अधिक बारीकी से।
____
.००,०११
+ ---------
1010 | १.००,०००
0
-
१ ०
0
----
१ ०० --------- +
0 |
----- |
1 000 |
0 |
------ | दोहरा
1 0000 | खंड
1010 |
------ |
1100 |
1010 |
---- |
100 ---- +
यह ठीक उसी प्रकार की चीज है जो आपको तब मिलती है जब आप 1/3 के लिए लंबा विभाजन करने की कोशिश करते हैं।
1/10, जब फैक्टर 1/2 (2 1 * 5 1 ) होता है। आधार 10 (या 10 के किसी भी एकाधिक) के लिए, यह संख्या समाप्त हो जाती है और इसे नियमित संख्या के रूप में जाना जाता है । एक दशमलव विस्तार जो दोहराता है एक दोहराए जाने वाले दशमलव के रूप में जाना जाता है , और जो संख्याएं दोहराए बिना हमेशा के लिए चली जाती हैं वे तर्कहीन संख्याएं हैं।
इस के पीछे का गणित में विशद जानकारी देता फर्मा थोड़ा प्रमेय ... और एक बार आप कह फर्मेट या प्रमेय, यह एक हो जाता है शुरू Math.SE सवाल ।
क्या ऐसी संख्याएं हैं जो आधार 10 में प्रतिनिधित्व करने योग्य नहीं हैं लेकिन आधार 2 में प्रतिनिधित्व किया जा सकता है?
जवाब न है'।
इसलिए, इस बिंदु पर हम सभी को स्पष्ट होना चाहिए कि एक तर्कसंगत संख्या के प्रत्येक निश्चित लंबाई के द्विआधारी विस्तार को एक निश्चित लंबाई दशमलव विस्तार के रूप में दर्शाया जा सकता है।
आइए हम C # में दशमलव पर अधिक बारीकी से देखें जो हमें .NET में दशमलव के अस्थायी बिंदु की ओर ले जाता है और लेखक को दिया, मैं मानता हूं कि यह कैसे काम करता है।
दशमलव प्रकार में किसी भी अन्य फ़्लोटिंग पॉइंट संख्या के समान घटक होते हैं: एक मंटिसा, एक घातांक और एक संकेत। हमेशा की तरह, संकेत सिर्फ एक बिट है, लेकिन मंटिसा के 96 बिट्स और एक्सपेंटर के 5 बिट्स हैं। हालांकि, सभी घातांक संयोजन मान्य नहीं हैं। केवल मान 0-28 काम करते हैं, और वे प्रभावी रूप से सभी नकारात्मक हैं: संख्यात्मक मान है । इसका अर्थ है कि प्रकार के अधिकतम और न्यूनतम मान +/- (2 96 -1) हैं, और पूर्ण परिमाण के संदर्भ में सबसे छोटी गैर शून्य संख्या 10 -28 है ।sign * mantissa / 10exponent
मैं अभी इस ओर ध्यान दिलाता हूं कि इस कार्यान्वयन के कारण उस double
प्रकार के नंबर हैं, जिनका प्रतिनिधित्व नहीं किया जा सकता है decimal
- जो कि सीमा से बाहर हैं। Double.Epsilon
वह है 4.94065645841247e-324
जो एक में प्रतिनिधित्व नहीं किया जा सकता है decimal
, लेकिन एक में कर सकते हैं double
।
हालांकि, उस सीमा के भीतर जो दशमलव का प्रतिनिधित्व कर सकता है, इसमें अन्य देशी प्रकारों की तुलना में सटीकता के अधिक बिट्स हैं और त्रुटि के बिना उनका प्रतिनिधित्व कर सकते हैं।
वहाँ कुछ अन्य प्रकार के आसपास तैर रहे हैं। C # में एक BigInteger है जो एक मनमाने ढंग से बड़े पूर्णांक का प्रतिनिधित्व कर सकता है। वहाँ जावा के लिए कोई बराबर है BigDecimal (जो संख्या 2 तक के दशमलव अंकों के साथ प्रतिनिधित्व कर सकते हैं 32 - जो एक बड़े आकार का रेंज अंक लंबा) वास्तव में । हालांकि, अगर आप थोड़ा सा इधर-उधर ताकते हैं , तो आप हाथ से चलने वाले कार्यान्वयन पा सकते हैं।
कुछ भाषाएँ हैं जिनमें एक तर्कसंगत डेटा प्रकार भी है जो आपको तर्कसंगत रूप से प्रतिनिधित्व करने की अनुमति देता है (ताकि 1/3 वास्तव में 1/3 हो)।
Specifcally सी # और नाव या तर्कसंगत के चुनाव के लिए, मैं से जॉन स्कीट के लिए स्थगित कर देंगे .NET में दशमलव चल पिंट :
अधिकांश व्यावसायिक अनुप्रयोगों को शायद फ्लोट या डबल के बजाय दशमलव का उपयोग करना चाहिए। मेरे अंगूठे का नियम यह है कि मुद्रा के रूप में मानव निर्मित मूल्य आमतौर पर दशमलव फ़्लोटिंग बिंदु के साथ बेहतर प्रतिनिधित्व करते हैं: उदाहरण के लिए, ठीक 1.25 डॉलर की अवधारणा पूरी तरह से उचित है। प्राकृतिक दुनिया के मूल्यों के लिए, जैसे कि लंबाई और वजन, बाइनरी फ्लोटिंग पॉइंट प्रकार अधिक समझ में आते हैं। हालांकि एक सैद्धांतिक "ठीक 1.25 मीटर" है जो वास्तव में कभी नहीं होने वाला है: आप निश्चित रूप से कभी भी सटीक लंबाई मापने में सक्षम नहीं होंगे, और वे परमाणु स्तर पर भी मौजूद होने की संभावना नहीं है। हम वहाँ एक निश्चित सहिष्णुता होने के लिए उपयोग किया जाता है।