एक बात मैं देखना चाहेंगे एक मान्यता है कि हो सकता है double
के लिए float
, एक को चौड़ा रूपांतरण के रूप में माना जाना चाहिए, जबकि float
करने के लिए double
सीमित करने है (*)। यह सहज ज्ञान युक्त लग सकता है, लेकिन विचार करें कि वास्तव में किस प्रकार का अर्थ है:
- 0.1f का अर्थ है "13,421,773.5 / 134,217,728, प्लस या माइनस 1 / 268,435,456 या तो"।
- 0.1 का वास्तव में मतलब है 3,602,879,701,896,397 / 36,028,797,018,963,968, प्लस या माइनस 1 / 72,057,594,037,927,936 या तो "
यदि किसी के पास double
"एक-दसवां" मात्रा का सबसे अच्छा प्रतिनिधित्व है और इसे धर्मान्तरित करता है float
, तो परिणाम "13,421,773.5 / 134,217,728, प्लस या माइनस 1 / 268,435,456 या" होगा, जो मूल्य का सही विवरण है।
इसके विपरीत, यदि किसी के पास float
"एक-दसवें" मात्रा का सबसे अच्छा प्रतिनिधित्व है और इसे धर्मान्तरित करता है double
, तो परिणाम "13,421,773.5 / 134,217,728, प्लस या माइनस 1 / 72,057,5,5,037,927,936 या तो" होगा - निहित सटीकता का एक स्तर जो 53 मिलियन से अधिक के कारक से गलत है।
हालाँकि IEEE-744 मानक के लिए यह आवश्यक है कि फ्लोटिंग-पॉइंट मैथ्स का प्रदर्शन किया जाए, हालाँकि हर फ़्लोटिंग-पॉइंट संख्या इसकी संख्या के केंद्र में सटीक संख्यात्मक मात्रा का प्रतिनिधित्व करती है, लेकिन इसका मतलब यह नहीं निकाला जाना चाहिए कि फ्लोटिंग-पॉइंट वैल्यू वास्तव में उन सटीक का प्रतिनिधित्व करते हैं संख्यात्मक मात्रा। इसके बजाय, यह मान लिया जाना चाहिए कि मानों को उनकी सीमा के केंद्र में तीन तथ्यों से उपजा है: (1) गणना का प्रदर्शन किया जाना चाहिए जैसे कि ऑपरेंड के कुछ विशेष सटीक मान हैं; (२) असंगत या अविवादित लोगों की तुलना में सुसंगत और प्रलेखित मान्यताएँ अधिक सहायक होती हैं; (३) यदि कोई एक सुसंगत धारणा बनाने जा रहा है, तो कोई अन्य सुसंगत धारणा यह मानने से बेहतर है कि कोई मात्रा उसकी श्रेणी के केंद्र का प्रतिनिधित्व करती है।
संयोग से, मुझे कुछ 25 साल या उससे पहले याद है, कोई व्यक्ति सी के लिए संख्यात्मक पैकेज के साथ आया था जिसमें "रेंज प्रकार" का उपयोग किया गया था, प्रत्येक में 128-बिट फ़्लोट की एक जोड़ी शामिल थी; सभी गणनाएं इस तरह से की जाएंगी कि प्रत्येक परिणाम के लिए न्यूनतम और अधिकतम संभव मूल्य की गणना की जा सके। यदि कोई एक बड़ी लंबी पुनरावृत्ति गणना करता है और [12.53401391134 12.53902812673] के मान के साथ आता है, तो एक को विश्वास हो सकता है कि जबकि परिशुद्धता के कई अंक राउंडिंग त्रुटियों में खो गए थे, परिणाम अभी भी यथोचित रूप से 12.54 (और यह wasn ') के रूप में व्यक्त किया गया है t वास्तव में १२.९ या ५३.२)। मुझे आश्चर्य है कि मैंने किसी भी मुख्यधारा की भाषाओं में इस प्रकार के लिए कोई समर्थन नहीं देखा है, खासकर जब से वे गणित इकाइयों के साथ एक अच्छा फिट लगते हैं जो समानांतर में कई मूल्यों पर काम कर सकते हैं।
(*) व्यवहार में, एकल-सटीक संख्याओं के साथ काम करते समय मध्यवर्ती संगणनाओं को धारण करने के लिए अक्सर डबल-परिशुद्धता मूल्यों का उपयोग करना सहायक होता है, इसलिए ऐसे सभी कार्यों के लिए टाइपकास्ट का उपयोग करना कष्टप्रद हो सकता है। भाषाएं "फ़ज़ी डबल" प्रकार होने से मदद कर सकती हैं, जो गणना को डबल के रूप में प्रदर्शित करेगी, और स्वतंत्र रूप से और एकल से डाली जा सकती है; यह विशेष रूप से सहायक होगा यदि फ़ंक्शन जो प्रकार double
और वापसी के मापदंडों को लेते double
हैं, उन्हें चिह्नित किया जा सकता है ताकि वे स्वचालित रूप से एक अधिभार उत्पन्न करें जो इसके बजाय "फजी डबल" को स्वीकार करता है और वापस करता है।