दिलचस्प पोस्ट
जेएसएफ एमवीसी ढांचे में एमवीसी क्या घटक हैं? बटन सबमिट करने से फ़ॉर्म को कैसे रोकें Google पत्रक में अपलोड किए गए CSV या XLS फ़ाइल से डेटा को स्वचालित रूप से आयात कैसे करें iPhone UIView एनिमेशन सर्वश्रेष्ठ अभ्यास कुकी सेट करें और जावास्क्रिप्ट के साथ कुकी प्राप्त करें टी-एसक्यूएल में एसक्यूएल सर्वर रेगुलर एक्सप्रेशंस मैं पायथन स्क्रिप्ट का पथ कैसे प्राप्त करूं जिसमें मैं चल रहा / रही हूं? मटप्ललिब में सतह के भूखंड जावास्क्रिप्ट isDOM है – आप कैसे जांच करते हैं कि जावास्क्रिप्ट ऑब्जेक्ट एक डोम ऑब्जेक्ट है? अजाक्स से PHP स्क्रिप्ट के साथ सरणी भेजें LINQ – पूर्ण बाहरी सम्मिलित हों अपवाद पकड़ो जिसे अलग थ्रेड में फेंका गया है पृष्ठभूमि-रंग के आधार पर सीएसएस फ़ॉन्ट-रंग को उलटा दें AJAX, PHP और jQuery का उपयोग कर एकाधिक छवि अपलोड करें स्प्रिंग एमवीसी के देखने की तकनीक के रूप में JSF का उपयोग करना

सबसे बड़ा पूर्णांक जो एक डबल में संग्रहीत किया जा सकता है

क्या सबसे बड़ा "नो फ्लोटिंग" पूर्णांक है जिसे आईईईई 754 डबल टाइप में खोया जा सकता है बिना परिशुद्धता खोया जा सकता है?

वेब के समाधान से एकत्रित समाधान "सबसे बड़ा पूर्णांक जो एक डबल में संग्रहीत किया जा सकता है"

सबसे बड़ी / सबसे बड़ी पूर्णांक जिसे सटीक खोए बिना डबल में जमा किया जा सकता है वह डबल के सबसे बड़े संभावित मूल्य के समान है। यही है, DBL_MAX या लगभग 1.8 × 10 308 (यदि आपका डबल एक आईईईई 754 64-बिट डबल है)। यह एक पूर्णांक है यह वास्तव में प्रतिनिधित्व किया है आपको और क्या चाहिए?

आगे बढ़ें, मुझसे पूछें कि सबसे बड़ा पूर्णांक क्या है, जैसे कि यह और सभी छोटे पूर्णांक को आईईईई 64-बिट डबल्स में सटीक खोए बिना जमा किया जा सकता है। एक आईईईई 64-बिट डबल 52 बिट्स मैंटिसा है, इसलिए मुझे लगता है कि यह 2 53 :

  • 2 53 + 1 को संग्रहीत नहीं किया जा सकता है, क्योंकि शुरुआत में 1 और अंत में 1 के बीच में बहुत सारे शून्य हैं।
  • 2 53 से कम कुछ भी संग्रहीत किया जा सकता है, जिसमें 52 बिट्स को स्पष्ट रूप से मंटिसा में संग्रहीत किया जाता है, और फिर प्रभाव में प्रतिपादक आपको दूसरा एक देता है।
  • 2 53 स्पष्ट रूप से संग्रहीत किया जा सकता है, क्योंकि यह 2 की एक छोटी सी शक्ति है

या इसे देखने का एक और तरीका: एक बार पूर्वाग्रह को एक्सपोनेंट से हटा दिया गया है, और साइन बिट को इस सवाल के लिए अप्रासंगिक के रूप में अनदेखा कर दिया गया है, तो डबल के द्वारा संग्रहीत मान 2 की शक्ति है, और 2 से गुणा करके 52-बिट पूर्णांक प्रतिपादक – 52 तो एक्सपोनेंट 52 के साथ आप सभी मूल्यों को 2 52 से 2 53 – 1 तक स्टोर कर सकते हैं। फिर एक्सपोनेंट 53 के साथ, अगली संख्या जिसे आप 2 53 के बाद रख सकते हैं 2 53 + 1 × 2 53 – 52 तो पहली बार सटीकता का नुकसान 2 53 + 1 के साथ होता है

9007199254740992 (9,007,199,254,740,992) की कोई गारंटी नहीं है 🙂

कार्यक्रम

 #include <math.h> #include <stdio.h> int main(void) { double dbl = 0; /* I started with 9007199254000000, a little less than 2^53 */ while (dbl + 1 != dbl) dbl++; printf("%.0f\n", dbl - 1); printf("%.0f\n", dbl); printf("%.0f\n", dbl + 1); return 0; } 

परिणाम

 9007199254740991
 9007199254740992
 9007199254740992

आईईईई 754 के लिंक के साथ विकिपीडिया को एक ही संदर्भ में यह कहना है:

एक ठेठ कंप्यूटर सिस्टम पर, एक 'दोहरी सटीक' (64-बिट) बाइनरी फ़्लोटिंग-पॉइंट संख्या में 53 बिट्स का एक गुणांक (जिसमें से एक निहित है), 11 बिट के एक एक्सपोनेंट और एक साइन बिट है।

2 ^ 53 बस 9 * 10 ^ 15 से अधिक है

सबसे बड़ा पूर्णांक जो आईईईई 754 डबल (64-बिट) में प्रदर्शित किया जा सकता है वह सबसे बड़ा मूल्य है जो कि प्रकार का प्रतिनिधित्व कर सकता है, क्योंकि वह मान स्वयं एक पूर्णांक है

इसे 0x7FEFFFFFFFFFFFFF रूप में 0x7FEFFFFFFFFFFFFF , जो 0x7FEFFFFFFFFFFFFF से बना है:

  • 1 (नकारात्मक) की तुलना में साइन बिट 0 (पॉजिटिव)
  • 0x7FF (2047 जो कि एक NaN या अनन्तता दर्शाता है) के बजाय अधिकतम एक्सपोनेंट 0x7FE (2046 जो पूर्वाग्रह के बाद 1023 का प्रतिनिधित्व करता है) घटाया गया है।
  • अधिकतम मंथिसा 0xFFFFFFFFFFFFF जो कि 52 बिट्स 1 है।

द्विआधारी में, मान निहित है, इसके बाद प्रत्यारोपण से मंटिसा के दूसरे 52 लोग, 971 शून्य (1023 – 52 = 9 71)

सही दशमलव मान है:

179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368

यह लगभग 1.8 x 10 308 है

आपको मांटिसा के आकार को देखने की जरूरत है एक आईईईई 754 64 बिट फ्लोटिंग प्वाइंट नंबर (जो कि 52 बिट्स, प्लस 1 इन्सियल है) वास्तव में पूर्णांक को 2 ^ 53 से कम या बराबर के पूर्ण मूल्य के साथ प्रदर्शित कर सकते हैं।

<float.h> से <float.h> को उस कम से कम एक उचित सन्निकटन देना चाहिए चूंकि उस दशमलव अंक के साथ सौदा है, और यह वास्तव में बाइनरी में संग्रहीत है, आप संभवतः सटीकता को खोए बिना कुछ बड़ा संग्रह कर सकते हैं, लेकिन वास्तव में यह कहना कितना मुश्किल है मुझे लगता है आपको इसे FLT_RADIX और DBL_MANT_DIG से FLT_RADIX सक्षम होना चाहिए, लेकिन मुझे यकीन नहीं है कि मैं परिणाम पर पूरी तरह भरोसा करूँगा।