जावास्क्रिप्ट में नंबर IEEE-754 डबल-परिशुद्धता बाइनरी फ्लोटिंग पॉइंट हैं, एक काफी कॉम्पैक्ट प्रारूप (64 बिट्स) जो तेज गणना और एक विशाल श्रेणी प्रदान करता है। यह एक संकेत बिट, एक 11-बिट घातांक, और 52-बिट महत्व के रूप में संख्या को संग्रहीत करके करता है (हालांकि चतुराई के माध्यम से यह वास्तव में 53 बिट्स सटीक का हो जाता है)। यह बाइनरी (बेस 2) फ्लोटिंग पॉइंट है: महत्व (प्लस कुछ चतुरता) हमें मूल्य देता है, और घातांक हमें संख्या का परिमाण देता है।
स्वाभाविक रूप से, इतने सारे महत्वपूर्ण बिट्स के साथ, हर संख्या को संग्रहीत नहीं किया जा सकता है। यहाँ संख्या 1 है, और 1 के बाद अगली उच्चतम संख्या है जो प्रारूप स्टोर कर सकती है, 1 + 2 -52 ≈ 1.00000000000000022, और उसके बाद अगला उच्चतम 1 + 2 × 2 -52 0000 1.00000000000000044:
+ ------------------------------------------------- -------------- साइन बिट
/ + ------- + ---------------------------------------- -------------- प्रतिपादक
/ / | + ------------------------------------------------- + - महत्व
/ / | / |
0 01111111111 000000000000000000000000000000000000000000000000
= 1
0 01111111111 000000000000000000000000000000000000000000000001
0000 1.00000000000000022
0 01111111111 00000000000000000000000000000000000000000000000000
0000 1.00000000000000044
1.00000000000000022 से 1.00000000000000044 पर कूदने पर ध्यान दें; 1.0000000000000003 स्टोर करने का कोई तरीका नहीं है। यह पूर्णांकों के साथ भी हो सकता है: Number.MAX_SAFE_INTEGER(9,007,199,254,740,991) उच्चतम धनात्मक पूर्णांक मान है कि प्रारूप जहां पकड़ सकता है iऔर i + 1दोनों बिल्कुल प्रतिनिधित्व योग्य हैं ( युक्ति )। 9,007,199,254,740,991 और 9,007,199,254,740,992 दोनों का प्रतिनिधित्व किया जा सकता है, लेकिन अगले पूर्णांक, 9,007,199,254,740,993 नहीं हो सकता; अगले पूर्णांक में हम 9,007,199,254,740,992 के बाद का प्रतिनिधित्व कर सकते हैं, जो 9,007,199,254,740,994 है। यहां थोड़ा सा पैटर्न दिया गया है, सबसे सही (सबसे महत्वपूर्ण) बिट पर ध्यान दें:
+ ------------------------------------------------- -------------- साइन बिट
/ + ------- + ---------------------------------------- -------------- प्रतिपादक
/ / | + ------------------------------------------------- + - महत्व
/ / | / |
0 10000110011 1111111111111111111111111111111111111111111111111111111111
= 9007199254740991 (नंबर। MAX_SAFE_INTEGER)
0 10000110100 000000000000000000000000000000000000000000000000
= 9007199254740992 (नंबर। MAX_SAFE_INTEGER + 1)
x xxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
9007199254740993 (Number.MAX_SAFE_INTEGER + 2) संग्रहीत नहीं किया जा सकता है
0 10000110100 000000000000000000000000000000000000000000000001
= 9007199254740994 (नंबर। MAX_SAFE_INTEGER + 3)
याद रखें, प्रारूप 2 आधार है, और उस घातांक के साथ कम से कम महत्वपूर्ण बिट अब आंशिक नहीं है; इसका मान 2 है। यह बंद हो सकता है (9,007,199,254,740,992) या (9,007,199,254,740,994); इसलिए इस बिंदु पर, हमने पूरे नंबर (पूर्णांक) के पैमाने पर भी सटीकता खोना शुरू कर दिया है। जिसका हमारे पाश के लिए निहितार्थ है!