मैं वर्णन को "कोड के रूप में फिर से बताऊंगा जो एक प्रकार को एक अलग प्रतिनिधित्व करने के लिए कुछ करने के उद्देश्य से परिवर्तित करता है जो मूल रूप में या तो बेहतर या बेहतर हो सकता था और फिर इसे वापस रूपांतरित करता है। कई परिस्थितियां हैं जहां कुछ को एक में परिवर्तित करना। विभिन्न प्रकार, उस पर अभिनय करना, और इसे वापस परिवर्तित करना पूरी तरह से उचित है और ऐसा करने में विफलता गलत व्यवहार का परिणाम होगा।
एक उदाहरण के रूप में जहां रूपांतरण अच्छा है:
एक में float
मनमाने संकेतों के चार मूल्य हैं जिनकी परिमाण 1,000 तक के कारक से भिन्न हो सकती है, और अंतिम स्थान पर 0.625 इकाइयों के भीतर राशि की गणना करने की आवश्यकता है। सभी चार मूल्यों को परिवर्तित करना double
, योग की गणना करना, और परिणाम को वापस रूपांतरित float
करना float
अकेले की तुलना में किसी भी दृष्टिकोण की तुलना में बहुत अधिक कुशल होगा ।
अंतिम स्थान (ULP) में 0.5 यूनिट तक फ्लोटिंग-पॉइंट वैल्यू सबसे सही हैं। इस उदाहरण के लिए आवश्यक है कि सबसे खराब स्थिति वाली त्रुटि से अधिकतम 25% से अधिक खराब राउंडिंग त्रुटि हो। डबल का उपयोग करने से एक मान प्राप्त होगा जो 0.5001 ULP के भीतर सटीक होगा। जबकि एक 0.625 ULP आवश्यकता से वंचित लग सकता है, इस तरह की आवश्यकताओं को अक्सर क्रमिक-सन्निकटन एल्गोरिदम में महत्वपूर्ण हैं। अधिक कसकर त्रुटि की सीमा निर्दिष्ट की जाती है, सबसे कम मामले में चलने की आवश्यकता कम होती है।
एक उदाहरण के रूप में जहां रूपांतरण खराब है:
किसी के पास एक फ्लोटिंग-पॉइंट संख्या है, और एक स्ट्रिंग को आउटपुट करने की इच्छा रखता है जो विशिष्ट रूप से इसके मूल्य का प्रतिनिधित्व करेगा। एक दृष्टिकोण यह है कि एक निश्चित संख्या में अंकों के साथ संख्या को स्ट्रिंग में परिवर्तित करना, इसे वापस बदलने की कोशिश करना, और देखें कि क्या परिणाम मेल खाता है।
लेकिन यह वास्तव में एक खराब दृष्टिकोण है। यदि एक दशमलव स्ट्रिंग एक मान का प्रतिनिधित्व करती है जो दो फ़्लोटिंग-पॉइंट मानों के बीच आधे बिंदु पर लगभग ठीक बैठता है, तो यह स्ट्रिंग-टू-फ्लोट विधि के लिए काफी महंगा है, यह गारंटी देता है कि यह हमेशा निकटतम float
मूल्य प्राप्त करेगा , और ऐसे कई रूपांतरण तरीके डॉन 'ऐसी गारंटी को बरकरार रखें (अन्य बातों के अलावा, ऐसा करने से कुछ मामलों में किसी संख्या के सभी अंकों को पढ़ने की आवश्यकता होगी, भले ही वह अरबों अंकों का हो)।
यह गारंटी देने के लिए एक विधि के लिए बहुत सस्ता है कि यह हमेशा एक मान लौटाएगा जो प्रतिनिधित्व मूल्य के अंतिम स्थान (ULP) में 0.5625 इकाइयों के भीतर है। एक मजबूत "प्रतिवर्ती" दशमलव-से-स्ट्रिंग प्रारूपण रूटीन की गणना करनी चाहिए कि आउटपुट वैल्यू सही मान से कितनी दूर है, और आउटपुट अंक तब तक जारी रखें जब तक कि परिणाम 0.375 (ULP) के भीतर न हो, यदि 0.25 (ULP) न हो। अन्यथा, यह एक स्ट्रिंग का उत्पादन कर सकता है जो कुछ रूपांतरण विधियों को सही ढंग से संसाधित करेगा, लेकिन अन्य रूपांतरण विधियां नहीं होंगी।
कभी-कभी एक अंक को आउटपुट करना बेहतर होता है जो आउटपुट से "आवश्यक" नहीं हो सकता है एक मूल्य जिसे गलत व्याख्या की जा सकती है। मुख्य भाग यह है कि कितने अंकों का आउटपुट होना चाहिए, इसका निर्णय आउटपुट प्रक्रिया से संबंधित सांख्यिक गणनाओं के आधार पर किया जाना चाहिए, बजाय इसके कि किसी विशेष विधि द्वारा स्ट्रिंग को एक संख्या में बदलने के प्रयास के परिणामस्वरूप।