आप जावास्क्रिप्ट की संख्या प्रकार की क्षमता बह निकला रहे हैं, जानकारी के लिए §8.5 of the spec देखते हैं। उन आईडी को स्ट्रिंग होने की आवश्यकता होगी।
आईईईई -754 डबल-परिशुद्धता फ़्लोटिंग पॉइंट (प्रकार जावास्क्रिप्ट उपयोग की तरह) सभी संख्याओं (निश्चित रूप से) का प्रतिनिधित्व नहीं कर सकता है। प्रसिद्ध, 0.1 + 0.2 == 0.3
गलत है। यह पूरी संख्या को प्रभावित कर सकता है जैसे कि यह आंशिक संख्याओं को प्रभावित करता है; एक बार जब आप 9, 007,19 9, 254,740,991 (Number.MAX_SAFE_INTEGER
) से ऊपर हो जाते हैं तो यह शुरू होता है।
Number.MAX_SAFE_INTEGER + 1
(9007199254740992
) से परे, आईईईई -754 फ्लोटिंग-पॉइंट प्रारूप अब हर लगातार पूर्णांक का प्रतिनिधित्व नहीं कर सकता है। 9007199254740991 + 1
9007199254740992
है, लेकिन 9007199254740992 + 1
भी9007199254740992
क्योंकि 9007199254740993
प्रारूप में नहीं दर्शाया जा सकता है। अगला जो 9007199254740994
हो सकता है। फिर 9007199254740995
नहीं हो सकता है, लेकिन 9007199254740996
कर सकते हैं।
कारण यह है कि हम बिट्स से बाहर हो गए हैं, इसलिए हमारे पास अब 1 एस बिट नहीं है; सबसे कम ऑर्डर बिट अब 2 के गुणकों का प्रतिनिधित्व करता है। आखिरकार, अगर हम आगे बढ़ते रहते हैं, तो हम उस बिट को खो देते हैं और केवल 4 के गुणकों में काम करते हैं। और इसी तरह।
आपके मान अच्छी तरह से उस दहलीज से ऊपर हैं, और इसलिए वे निकटतम प्रतिनिधित्व मूल्य पर गोल हो जाते हैं।
आप बिट्स के बारे में उत्सुक हैं, तो यहां क्या होता है: एक आईईईई-754 द्विआधारी डबल परिशुद्धता फ्लोटिंग प्वाइंट नंबर एक संकेत बिट, प्रतिपादक के 11 बिट्स (जो संख्या के समग्र पैमाने को परिभाषित करता है है , 2 की शक्ति के रूप में [क्योंकि यह एक बाइनरी प्रारूप है]), और 52 बिट्स महत्व (लेकिन प्रारूप इतना चालाक है कि यह उन 52 बिट्स में से 53 बिट सटीकता प्राप्त करता है)। एक्सपोनेंट का उपयोग कैसे जटिल होता है (described here), लेकिन में बहुत अस्पष्ट शब्द, यदि हम एक्सपोनेंट में एक जोड़ते हैं, तो महत्व का मूल्य दोगुना हो जाता है, क्योंकि एक्सपोनेंट 2 की शक्तियों के लिए उपयोग किया जाता है (फिर, वहां चेतावनी, यह प्रत्यक्ष नहीं है, वहां चतुरता है)।
तो चलो मूल्य 9007199254740991
को देखो (उर्फ, Number.MAX_SAFE_INTEGER
):
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− sign bit
/ +−−−−−−−+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− exponent
// | +−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+− significand
// |/ |
0 10000110011 1111111111111111111111111111111111111111111111111111
= 9007199254740991 (Number.MAX_SAFE_INTEGER)
प्रतिपादक मूल्य, 10000110011
, इसका मतलब है कि हर बार जब हम significand करने के लिए एक जोड़ने के लिए, संख्या का प्रतिनिधित्व अप 1 से (चला जाता है पूरा नंबर 1, हमने बहुत पहले आंशिक संख्याओं का प्रतिनिधित्व करने की क्षमता खो दी)।
लेकिन अब यह महत्व भरा हुआ है। उस संख्या को पार करने के लिए, हमें एक्सपोनेंट को बढ़ाना होगा, जिसका अर्थ है कि यदि हम किसी को महत्व में जोड़ते हैं, तो प्रदर्शित संख्या का मूल्य 2 तक नहीं जाता है, न कि 1 (क्योंकि एक्सपोनेंट 2 पर लागू होता है, इसका आधार द्विआधारी चल बिंदु संख्या):
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− sign bit
/ +−−−−−−−+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− exponent
// | +−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+− significand
// |/ |
0 10000110100 0000000000000000000000000000000000000000000000000000
= 9007199254740992 (Number.MAX_SAFE_INTEGER + 1)
ठीक है, कि, ठीक है क्योंकि 9007199254740991 + 1
9007199254740992
वैसे भी है। परंतु! हम 9007199254740993
का प्रतिनिधित्व नहीं कर सकते हैं। हम बिट्स से बाहर हो गए हैं। हम significand करने के लिए सिर्फ 1 जोड़ेंगे, तो वह मूल्य के लिए 2 जोड़ता है:
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− sign bit
/ +−−−−−−−+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− exponent
// | +−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+− significand
// |/ |
0 10000110100 0000000000000000000000000000000000000000000000000001
= 9007199254740994 (Number.MAX_SAFE_INTEGER + 3)
प्रारूप सिर्फ अब और विषम संख्या का प्रतिनिधित्व नहीं कर सकते हैं, जैसा कि हम मूल्य में वृद्धि, प्रतिपादक बहुत बड़ा है।
आखिरकार, हम फिर से महत्वपूर्ण बिट्स से बाहर निकलते हैं और एक्सपोनेंट को बढ़ाना पड़ता है, इसलिए हम केवल 4 के गुणकों का प्रतिनिधित्व करने में सक्षम होते हैं। फिर 8 के गुणक। फिर 16 के गुणक।
सभी उपयोगी सहायक उत्तरों के लिए धन्यवाद, मेरी इच्छा है कि मैं सभी 3 को आधिकारिक उत्तरों के रूप में चिह्नित कर सकूं। – Jaanus