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


जवाबों:


506

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

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

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

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


126
+1 अच्छा काम यह दर्शाता है कि प्रश्न का वास्तव में मतलब नहीं था कि पूछने वाले ने क्या इरादा किया है और दोनों उत्तर प्रदान कर रहे हैं ("तकनीकी रूप से सही" और "शायद उम्मीद है")।
पास्कल कुक्कू

62
या "के बारे में गड़बड़" और "मदद करने की कोशिश" के रूप में मैं उन्हें फोन करने के लिए करते हैं :-)
स्टीव जेसप

8
मैं टोनी द पोनी को नमन करता हूं, और कोई दूसरा नहीं।
स्टीव जेसप

11
आप "सभी छोटे पूर्णांक" का मतलब नहीं है, आप सभी बराबर या कम परिमाण के पूर्णांक का मतलब है। क्योंकि नीचे 2 ^ 53 से नीचे कई नकारात्मक पूर्णांक हैं और एक दोहरे में बिल्कुल प्रतिनिधित्व नहीं किया जा सकता है।
दक्षिणी आतिथ्य 8

13
मैं छोटे का मतलब है, और यह वही है जो मेरा मतलब है जब मैं छोटे से कहता हूं :-) -1,000,000 1 से कम है, लेकिन यह छोटा नहीं है।
स्टीव जेसप

77

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

7
मान लिया जाये कि यह बंद 'हो जाएगा लेकिन कम एक 2 ^ N से है, तो एक तेजी से परीक्षण किया जाता है double dbl = 1; while (dbl + 1 != dbl) dbl *= 2; while (dbl == --dbl);जो एक ही परिणाम पैदावार
Seph

4
@Seph क्या ...? नहीं? while (dbl == --dbl)हमेशा के लिए लूप करेंगे या बिल्कुल नहीं। :) (इस मामले में, बिल्कुल नहीं, क्योंकि यह 2 ^ एन है)। आपको नीचे से इसे अप्रोच करना होगा। यह वास्तव में अपेक्षित परिणाम से कम समय में परिणाम देगा (चूंकि लूप घटने के समय में एक चेक dbl)। और यह निष्पादन के आदेश पर निर्भर करता है, यदि कमी बाएं पक्ष के मूल्यांकन से पहले या बाद में की जाती है (जो कि अब तक अपरिभाषित है)। यदि यह पूर्व है, तो यह हमेशा हमेशा के लिए सत्य और लूप हो जाएगा।
फाल्स्ट्रो

10
शायद इंगित करें कि 2 ^ 53 = 9,007,199,254,740,992 कहीं।
Xonatron

1
इससे बहस करना मुश्किल है! अच्छा प्रयोग
20

उपयोग करने के लिए एक कमजोरी while (dbl + 1 != dbl) dbl++;है कि में dbl + 1 != dblका उपयोग कर मूल्यांकन कर सकते हैं long doubleगणित - पर विचार FLT_EVAL_METHOD == 2। यह एक अनंत लूप में समाप्त हो सकता है।
chux -

25

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

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

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


@ कमोबेश जेसोप को कम से कम, यही वास्तव में मैं कह रहा हूं। मुझे ऐसे हार्डवेयर सिस्टम का भी सामना करना पड़ा है, जिनके पास FPU नहीं है, जो अभी भी IEEE- कम्प्लायंट होने की आवश्यकता है, ताकि "विशिष्ट सिस्टम" सामान वास्तव में मेरी मदद न करें यदि मैं 8 महीने बाद यहां वापस आऊं और उसी जानकारी की आवश्यकता हो मेरे 68K- आधारित माइक्रोकंट्रोलर (यह मानते हुए कि इसमें FPU नहीं है ... मुझे याद नहीं है)।
सैन जैसिंटो

14
@ शान जैसिंटो - "यह बेकार है" वास्तव में कठोर है। इसका उत्तर काफी उपयोगी है, बस उतना उपयोगी नहीं है जितना कि यदि यह टिप्पणी शामिल होती कि ठेठ कंप्यूटर सिस्टम वास्तव में IEEE 754 रिप्रसेन्टेशन का उपयोग करते हैं।
स्टीफन सी। स्टील

@ स्टीफन सी। स्टील, वास्तव में आप सही हैं। मेरे परिदृश्य के तहत, बाद में इस पर वापस आना और आईईईई अधिकतम की तलाश करना, यह असंभव है कि एक 'विशिष्ट प्रणाली' क्या है, लेकिन इस शिकायत के अलावा जवाब में अभी भी योग्यता है।
San Jacinto

20

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

इसे 0x7FEFFFFFFFFFFFFFनिम्न के रूप में दर्शाया गया है , जो इस प्रकार है :

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

बाइनरी में, मान का मतलब 1 होता है जिसके बाद मंटिसा के एक और 52 लोग होते हैं, फिर घातांक से 971 शून्य (1023 - 52 = 971) होते हैं।

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

179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368

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


उस सबसे बड़े मूल्य के बारे में क्या जो इसके बीच के सभी मूल्यों के साथ प्रतिनिधित्व कर सकता है और शून्य सन्निहित प्रतिनिधित्व योग्य है?
एरोन फ्रेंके

@AaronFranke प्रश्न को सन्निहित प्रतिनिधित्व के बारे में नहीं पूछा गया था, लेकिन उस अलग प्रश्न के उत्तर को यहां अन्य अधिकांश उत्तरों में शामिल किया गया है, या गलत तरीके से वास्तविक उत्तर के रूप में भी दिया गया है। यह 2 It's (2 53 की शक्ति के लिए) है।
साइमन बीबर

8

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


8
यह वास्तव में 2 ^ 53, भी :-) का प्रतिनिधित्व कर सकता है
स्टीव जेसप

6

2
यह उत्तर प्रशस्ति पत्र के साथ बेहतर होगा।
सैन जैसिंटो

2
@ अच्छी तरह से, यदि पूर्णांक में बाईं ओर शून्य है, तो यह ठीक से संग्रहीत है।
विल्हेम

4
@all आप downvoters: 1.7976931348623157 × 10 ^ 308 है एक सटीक पूर्णांक। क्या आप सभी को उपचारात्मक गणित की कक्षाओं में भाग लेने की आवश्यकता है या कुछ और ??
दान मोल्डिंग

6
हम इस निराशाजनक उत्तर की चर्चा में यहाँ शब्दार्थ के लिए नीचे हैं। सही है, उस संख्या को ठीक-ठीक दर्शाया जा सकता है और इस तरह प्रश्न पत्र पूरा हो जाता है। लेकिन हम सभी जानते हैं कि यह निकटवर्ती मिसाइलों के एक महासागर में सटीकता का एक छोटा सा द्वीप है, और हम में से अधिकांश ने इस सवाल का सही अर्थ लगाया कि "सबसे बड़ी संख्या से परे, जिसमें परिशुद्धता नीचे की ओर जाती है।" आह, यह अद्भुत नहीं है कि CompSci एक सटीक विज्ञान है? :)
कार्ल स्मोत्रिकज़ 18

2
@DanMoulding 1.7976931348623157 × 10 ^ 308 एक सटीक पूर्णांक है, लेकिन मुझे पूरा यकीन है कि यह विशेष पूर्णांक एक डबल में बिल्कुल संग्रहीत नहीं किया जा सकता है।
पास्कल क्यूक

2

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


यह प्रश्न का उत्तर प्रदान नहीं करता है। किसी लेखक से स्पष्टीकरण मांगने या उसका अनुरोध करने के लिए, उनके पोस्ट के नीचे एक टिप्पणी छोड़ दें।
माइकलचिरिको

@MichaelChirico: यह उस प्रश्न का उत्तर देता है जिसका उसने पूछने का इरादा किया था, क्योंकि जब उत्तर लिखा गया था, तब यह अस्तित्व में था। प्रश्न के संपादित इतिहास को देखने के लिए, प्रश्न के निचले भाग में "संपादित जून 19'14 को 11:40 पर" लिंक पर क्लिक करें।
जेरी कॉफिन

आपका उत्तर एक टिप्पणी की तरह पढ़ता है क्योंकि यह आत्मविश्वास / अधिनायकत्व की कमी महसूस करता है कि एक उत्तर होना चाहिए ("कम से कम एक उचित देना चाहिए ..." "वास्तव में कितना ... कहना मुश्किल है" "मुझे लगता है ... ”)। मेरे पास पूछे गए सवाल या जवाब पर कोई विशेषज्ञता नहीं है, इसलिए मैं गलत हो सकता हूं; मुझे दिए गए मेरे दो सेंट में डालकर मुझे समीक्षा कतार से भेज दिया गया था (जो मुझे लगता है कि इसका मतलब है कि अन्य उपयोगकर्ताओं ने आपके उत्तर को चिह्नित किया है)।
माइकलचिरिको

1
@MichaelChirico: उनके पास अच्छी तरह से हो सकता है - आप केवल एक ही विषय से अनभिज्ञ हैं जो विषय से अनभिज्ञ हैं; जो आपको असामान्य बनाता है, वह यह है कि आप अपने बारे में अनभिज्ञ महसूस करते हैं। अधिकांश उत्तर जो कि C में एक फ्लोटिंग पॉइंट नंबर की शुद्धता के बारे में ध्वनि-निरोधी हैं, केवल गलत हैं। उदाहरण के लिए, उनमें से कई (अधिकांश) झूठी धारणा पर आधारित हैं जो कि एdouble सीधे एक विशिष्ट IEEE प्रकार से मेल खाती है, लेकिन इसकी आवश्यकता नहीं है, और जब इस उत्तर को लिखा गया था तो किसी विशेष IEEE प्रकार का उल्लेख नहीं किया गया था।
जेरी कॉफिन

समझ गया। मैं शायद उस जानकारी को उत्तर में जोड़ने का सुझाव दूंगा।
माइकलचिरिको
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.