Java double
s IEEE-754 प्रारूप में हैं, इसलिए उनके पास 52-बिट अंश है; दो में से किसी भी दो आसन्न शक्तियों के बीच (एक के एक और विशेष को मिलाकर), इसलिए 2 से 52 double
वीं शक्ति अलग-अलग होगी (यानी, 4503599627370496)। उदाहरण के लिए, double
0.5 और शामिल किए गए 1.0 के बीच अलग-अलग एस की संख्या है, और ठीक यही है कि कई भी 1.0 शामिल और 2.0 को छोड़कर, और इसके बाद के बीच झूठ बोलते हैं।
doubles
0.0 और 1.0 के बीच की गणना दो की शक्तियों के बीच ऐसा करने की तुलना में कठिन है, क्योंकि उस सीमा में दो की कई शक्तियां शामिल हैं, और, यह भी, एक व्यक्ति संख्याओं के कांटेदार मुद्दों में हो जाता है। एक्सपट्र्स के 11 बिट्स में से 10 विचाराधीन रेंज को कवर करते हैं, इसलिए, जिसमें डिमनरलाइज्ड नंबर (और मुझे लगता है कि कुछ प्रकार के NaN
) शामिल हैं, आपके पास 1024 गुना होगा, double
जैसे कि दो की शक्तियों के बीच रखना - 2**62
वैसे भी कुल मिलाकर इससे अधिक नहीं। । अपभ्रंश और ग को छोड़कर, मेरा मानना है कि गिनती 1023 बार होगी 2**52
।
"100 से 100.1" जैसी मनमानी सीमा के लिए यह और भी कठिन है क्योंकि ऊपरी बाउंड को बिल्कुल एक के रूप में नहीं दिखाया जा सकता है double
(दो की किसी भी शक्ति का सटीक एक से अधिक नहीं होना)। एक आसान सन्निकटन के रूप में, चूंकि दो की शक्तियों के बीच प्रगति रैखिक है, आप कह सकते हैं कि उक्त सीमा 0.1 / 64
दो (64 और 128) की आसपास की शक्तियों के बीच की अवधि की है, इसलिए आप इसके बारे में अपेक्षा करेंगे
(0.1 / 64) * 2**52
विशिष्ट double
s - जो आता है 7036874417766.4004
... एक या दो को लेते हैं; ;-)।