2017-01-21 8 views
6

मुझे पता है कि सिंगल वैल्यू (या डबल) स्टोर करना बहुत सटीक नहीं हो सकता है। इसलिए उदाहरण के लिए 125.12 का भंडारण 125.1200074788 हो सकता है। अब डेल्फी में उनके कुछ उपयोगी कार्य हैं जैसे समानता या तुलनात्मकता जो एक ईपीएसलॉन को सर्वो के रूप में लेते हैं और कहते हैं कि 125.1200074788 या उदाहरण के लिए 125.1200087952 बराबर है।सिंगल, डबल और सटीक

लेकिन मैं अक्सर कोड सामान में देखता हूं जैसे: अगर asingleVar = 0 तब ... और वास्तव में यह हमेशा काम करता है। क्यूं कर ? एक ही var में उदाहरण 0 के लिए संग्रहीत क्यों सटीक मान रखते हैं?

+0

शून्य प्रतिनिधित्व योग्य है। सहिष्णुता की तुलना करना काफी आसान है लेकिन आप सहनशीलता कैसे चुनते हैं? आपको एल्गोरिदम को समझने की आवश्यकता है। एल्गोरिदम के ज्ञान के बिना दी गई कोई भी सलाह शायद खराब सलाह है। –

उत्तर

9

केवल वे मान जो m*2^e रूप में हैं, जहां एम और ई पूर्णांक हैं, एक फ़्लोटिंग पॉइंट वेरिएबल में संग्रहीत किए जा सकते हैं (हालांकि उनमें से सभी, यह परिशुद्धता पर निर्भर नहीं है)। 0 इस फ़ॉर्म में है, और 125.12 नहीं है, क्योंकि यह 3128/25 के बराबर है, और 1/252 की पूर्णांक शक्ति नहीं है।

एक एकल (या डबल) परिशुद्धता चर को 125.12 की तुलना सबसे शायद हमेशा False वापस आ जाएगी, क्योंकि एक शाब्दिक 125.12 एक विस्तारित परिशुद्धता संख्या के रूप में माना जाएगा, और कोई भी (या डबल) सटीक संख्या में इस तरह के एक मूल्य के लिए होगा।

+0

तो इसका मतलब यह है कि कार्य के डेल्फी कार्यान्वयन TRectf.IsEmpty: बूलियन; प्रारंभ करें परिणाम: = (दायां <= बाएं) या (नीचे <= शीर्ष); अंत; यदि बहुत सटीक नहीं है? – loki

+1

@loki समस्या विभिन्न प्रकार की समानता के साथ है; यहां आपके पास <= और वही प्रकार हैं (दाएं, बाएं, ऊपर और नीचे एक ही प्रकार है, मुझे लगता है) – mik

+0

धन्यवाद हाँ, मैंने इसे देखा ... – loki

-1

रुडी वेल्थ्यूस द्वारा बिगडेसिमल यूनिट के लिए अच्छा उपयोग की तरह दिखता है। सटीकता और सटीकता के लाखों दशमलव स्थानों।

+1

बिल्कुल उचित नहीं लगता है। आप ऐसा क्यों सोचेंगे। क्या आपने प्रदर्शन के प्रभाव को माना है? लेकिन सबसे महत्वपूर्ण बात यह है कि सवाल का जवाब देने के बारे में कैसे। –

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