2011-08-22 11 views
17

आईईईई 754 युगल का उपयोग करने वाली कई प्रोग्रामिंग भाषाएं उन युगल को स्ट्रिंग में बदलने के लिए लाइब्रेरी फ़ंक्शन प्रदान करती हैं। उदाहरण के लिए, सी में sprintf है, सी ++ में stringstream है, जावा में Double.toString, आदिएल्गोरिदम एक आईईईई 754 डबल स्ट्रिंग में कनवर्ट करने के लिए?

आंतरिक रूप से, इन कार्यों को कैसे कार्यान्वित किया जाता है? यही है, वे एल्गोरिदम (ओं) का उपयोग डबल को एक स्ट्रिंग प्रस्तुति में बदलने के लिए कर रहे हैं, बशर्ते कि वे अक्सर प्रोग्रामर द्वारा चुनी गई सटीक सीमाओं के अधीन होते हैं?

धन्यवाद!

उत्तर

11

विभिन्न सॉफ्टवेयर वातावरण द्वारा इस्तेमाल किया स्ट्रिंग निरूपण करने के लिए चल बिन्दु संख्या परिवर्तित करने के लिए कोड को आमतौर पर निम्नलिखित पर आधारित है प्रकाशन (स्टील और व्हाइट का काम विशेष रूप से अक्सर उद्धृत किया जाता है):

जेरोम टी। कोऑन। फ़्लोटिंग-प्वाइंट अंकगणित के लिए प्रस्तावित मानक के लिए एक कार्यान्वयन गाइड। कंप्यूटर, वॉल्यूम। 13, संख्या 1, जनवरी 1 9 80, पीपी 68-79

गाय। एल। स्टील जूनियर और जे एल व्हाइट। फ़्लोटिंग-पॉइंट नंबरों को सटीक रूप से प्रिंट कैसे करें। प्रोग्रामिंग भाषा डिजाइन और कार्यान्वयन पर एसीएम सिग्प्लान 9 0 सम्मेलन की कार्यवाही में, पेज 112-126, व्हाइट प्लेन, न्यूयॉर्क, जून 1 99 0।

डेविड एम। गे। सही ढंग से गोल बाइनरी-दशमलव और दशमलव-बाइनरी रूपांतरण। तकनीकी रिपोर्ट 90--10, एटी & टी बेल Laboraties, नवंबर 1990

कुछ प्रासंगिक फॉलोअप काम:

रॉबर्ट जी बर्गर और आर केंट डिबविग। फ्लोटिंग-पॉइंट नंबरों को तेज़ी से और सटीक प्रिंट करना। प्रोग्रामिंग भाषा डिजाइन और कार्यान्वयन पर एसीएम सिग्प्लान 1 99 6 सम्मेलन की कार्यवाही में, पृष्ठ 108-116, फिलाडेल्फिया, पीए, यूएसए, मई 1 99 6

गाय एल। स्टील जूनियर और जॉन एल व्हाइट। पूर्वदर्शी: फ़्लोटिंग-पॉइंट संख्याओं को सटीक रूप से प्रिंट कैसे करें। एसीएम सिग्प्लान नोटिस, वॉल्यूम 39, संख्या 4, पेज 372-389, अप्रैल 2004

फ्लोरियन लोइट्सच। पूर्णांक के साथ त्वरित और सटीक रूप से फ़्लोटिंग-पॉइंट नंबर प्रिंट करना। प्रोग्रामिंग भाषा डिजाइन और कार्यान्वयन पर 2010 एसीएम सिग्प्लान सम्मेलन की कार्यवाही में, पेज 233-243, टोरंटो, ऑन, कनाडा, जून 2010

+4

2016 में एक और नया पेपर: एंड्रीस्को, मार्क, रंजीत झला, और सोरिन लेर्नर। "फ्लोटिंग-पॉइंट नंबर प्रिंट करना: एक तेज, हमेशा सही विधि।" एसीएम सिग्प्लान नोटिस 51, संख्या। 1 (2016): 555-567। – sffc

2

अधिकांश उदाहरण भाषाओं के लिए आप स्रोत को उद्धृत करते हैं, क्योंकि वे मुक्त स्रोत में उपलब्ध हैं क्योंकि वे मुक्त स्रोत में उपलब्ध हैं।

जावा के लिए, कक्षा java.lang.Double इस काम को sun.misc.FloatingDecimal पर प्रस्तुत करता है। इसके कन्स्ट्रक्टर और javaFormatString() विधि को देखें।

सी के लिए, glibc हमेशा एक अच्छा उदाहरण है, और वहां हम see हैं कि फ़्लोटिंग पॉइंट आउटपुट अपनी स्रोत फ़ाइल में स्थित है।

13

मेरा मानना ​​है कि आप के लिए Printing Floating-Point Numbers Quickly and Accurately

देख रहे हैं मैं एक पोस्ट पर कि लिंक मिल गया: here.

+1

एक अच्छा सुझाव आईएमओ, लेकिन (दुख की बात है) शायद ही कभी एल्गोरिदम चुना गया है। यही कारण है कि 0.2 99 99 99 99 99 99 99 99 99566 और ऐसे नियमित रूप से दिखाते हैं और बहुत भ्रम पैदा करते हैं। – harold

संबंधित मुद्दे