को प्रभावित कर सकते हैं, d1.d2d3d4d5 ... dnExxx के दशमलव प्रस्तुतियों पर विचार करें जहां xxx एक मनमानी एक्सपोनेंट है और दोनों d1 और dn nonzero हैं।दशमलव अंकों की अधिकतम संख्या जो एक डबल
अधिकतम एन ज्ञात है कि दशमलव प्रतिनिधित्व d1.d2d3d4d5 ... dnExxx ऐसा है कि अंतराल (d1.d2d3d4d5 ... dnExxx, d1.d2d3d4d5 ... ((dn) +1) Exxx) में एक आईईईई 754 डबल है?
n कम से कम 17 होना चाहिए सवाल यह है कि 17
यह संख्या ऊपर कितना n अंकों की संख्या के साथ कुछ है कि यह एक दशमलव करने वाली डबल रूपांतरण ऐसे में विचार करने के लिए पर्याप्त है strtod()
के रूप में। मैंने David M. Gay's implementation के लिए स्रोत कोड देखा जो वहां एक उत्तर खोजने की उम्मीद कर रहा था। "40" के लिए एक संकेत है लेकिन यह अस्पष्ट है कि यह ध्वनि गणितीय परिणाम या केवल सांख्यिकीय रूप से सुरक्षित बाध्यता का परिणाम है। इसके अलावा "छंटनी" के बारे में टिप्पणी यह 0.5000000000000000000000000000000000000000000000000001 जैसी ध्वनि को राउंड-अप मोड में 0.5 में परिवर्तित किया जा सकता है।
Musl's implementation लगभग 125 * 9 अंक पढ़ने लगता है, जो बहुत कुछ है।
if (c!='0') x[KMAX-4] |= 1;
अंत में, कैसे जवाब परिवर्तन जब प्रतिस्थापन है "शामिल एक आईईईई 754 डबल" "लगातार दो आईईईई 754 डबल्स के मध्य होता है" के साथ: तो फिर यह "स्टिकी" मोड पर स्विच करता है?
मुझे यकीन नहीं है कि मैं इस बिंदु को समझता हूं। उदाहरण के लिए, '2^(- 1074)' में 751 महत्वपूर्ण दशमलव अंक हैं, इस प्रकार एक दशमलव प्रतिनिधित्व 'd1.d2 है ...डी 750 ई -324 'हालत को संतुष्ट करता है (आप लंबे समय तक प्राप्त कर सकते हैं, लेकिन ज्यादा नहीं)। लेकिन निकटतम आईईईई 754 'डबल' निर्धारित करने के लिए आपको केवल इन अंकों के मुट्ठी भर की आवश्यकता है। –
@ डैनियल फिशर लेकिन 2^(- 1074) अनन्य अंतराल में नहीं है (d1.d2 ... d750E-324, d1.d2 ... (d750 + 1) ई -324)। वैसे (डी 750 + 1) डी 750 एक "9" है, तो नोटेशन का मामूली दुरुपयोग है। यह दुरुपयोग मेरे प्रश्न में भी है लेकिन वैकल्पिक (d1.d2 ... d750E-324, (d1.d2 ... d750E-324 + 1E-1074)) भ्रमित भी है। मुझे एक्सपोनेंट गलत भी मिल सकता है। –
मैंने सटीक प्रतिनिधित्व के मुकाबले एक अंक कम किया है, इसलिए यह खुले अंतराल में है। –