एक ईपीएसलॉन मूल्य के खिलाफ अपने मतभेदों की तुलना करने के बजाय मैं दो युगल की तुलना करने के लिए 2 के पूरक का उपयोग क्यों करूं?

संदर्भित यहां और यहां ... मैं एक ईपीएसलॉन विधि पर दो पूरक का उपयोग क्यों करूं? ऐसा लगता है कि अधिकांश मामलों के लिए ईपीएसलॉन विधि पर्याप्त होगी।


Update: I'm purely looking for a theoretical reason why you'd use one over the other. I've always used the epsilon method.

क्या किसी ने 2 की पूरक तुलना सफलतापूर्वक उपयोग की है? क्यूं कर? क्यों नहीं?

0

6 उत्तर

ओस्कर का अधिकार इसके साथ तब तक पेंच न करें जब तक कि आपको वास्तव में उस प्रदर्शन की आवश्यकता न हो।

और तुम नहीं करते। यदि आप ऐसी परिस्थिति में थे, तो आपको सवाल पूछने की आवश्यकता नहीं होगी - आपको पहले से ही पता होगा। अगर आपको लगता है कि आप करते हैं, तो आप नहीं करते हैं। आपकी प्रदर्शन समस्याएं कहीं और झूठ बोलती हैं। बस पठनीय संस्करण का उपयोग करें।

0
जोड़ा

बिट्स विधि तेज हो सकती है। मैं कह सकता हूं क्योंकि आधुनिक (मल्टीकोर, अत्यधिक पाइपलाइन) प्रोसेसर पर यह अनुमान लगाना असंभव है कि वास्तव में तेज़ क्या है। कोड को सबसे सरल रूप से सही कार्यान्वयन कोड करें, फिर मापें, फिर ऑप्टोमाइज़ करें।

0
जोड़ा

जब गति की बात आती है, तो इन नियमों का पालन करें:

  1. यदि आप एक बहुत अनुभवी डेवलपर नहीं हैं, तो अनुकूलन न करें।
  2. यदि आप एक अनुभवी डेवलपर हैं, तो अभी तक अनुकूलित न करें।

सबसे आसान तरीका करो।

एलेक्स

0
जोड़ा
मैं जो पूछ रहा हूं उसके साथ क्या करना है? मैं जानना चाहता हूं कि आप किसी दूसरे पर एक दृष्टिकोण का उपयोग क्यों करते हैं, न कि कुछ भी अनुकूलित करना है या नहीं।
जोड़ा लेखक Steve Duitsman, स्रोत

आपके द्वारा संदर्भित दूसरा लिंक एक ऐसे लेख का उल्लेख करता है जिसमें इस मुद्दे का काफी लंबा विवरण है:

http://www.cygnus-software.com/papers/comparingfloats/comparingfloats। htm

लेकिन जब तक आप प्रदर्शन नहीं कर रहे हैं, मैं ईपीएसलॉन के साथ रहूंगा ताकि लोग आपका कोड डीबग कर सकें

0
जोड़ा
तो संक्षिप्त जवाब ... epsilon की तुलना में प्रदर्शन बेहतर है?
जोड़ा लेखक Steve Duitsman, स्रोत
मैं आपसे सहमत हुँ। यदि कुछ और नहीं है, तो पठनीयता मेरी पहली चिंता होनी चाहिए।
जोड़ा लेखक Steve Duitsman, स्रोत
ध्यान दें कि पूर्णांक बिट-ट्विडलिंग विधि का उपयोग करके प्रदर्शन बदतर हो सकता है क्योंकि फ़्लोटिंग पॉइंट और पूर्णांक रजिस्टरों के बीच बिटकस्ट्रिंग चलाना एक तेज़ ऑपरेशन नहीं है (चिप और निर्देश सेट के आधार पर उपयोग किया जाता है)। मैं तब तक इससे बचूंगा जब तक आप पूरी तरह से सुनिश्चित न हों कि आपको अतिरिक्त प्रदर्शन की आवश्यकता है, और आप इसे पूर्ण रूप से एक पूर्ण ईपीएसलॉन चुनकर (उदाहरण के लिए) नहीं प्राप्त कर सकते हैं।
जोड़ा लेखक Eamon Nerbonne, स्रोत
क्या पता। मैं किसी भी तुलना के लिए जटिल के रूप में कुछ भी उपयोग नहीं करता जब तक कि संख्याओं की तुलना मेरे ऐप का मुख्य हिस्सा न हो। बस एक सरल टाइपो डीबगिंग समय speant कल्पना कीजिए ...
जोड़ा लेखक Oskar, स्रोत

संक्षेप में, अज्ञात उत्पत्ति के साथ दो फ्लोट की तुलना करते समय, एक ईपीएसलॉन चुनना जो वैध है लगभग असंभव है।

उदाहरण के लिए:

अटलांटा जीए, डलास TX और ओहियो में कुछ जगहों के बीच मील की दूरी की तुलना करते समय एक अच्छा ईपीएसलॉन क्या है?

मेरे बाएं पैर, मेरे दाहिने पैर और मेरे डेस्क के नीचे कंप्यूटर के बीच मील में दूरी की तुलना करते समय एक अच्छा ईपीएसलॉन क्या है?

संपादित करें:

ठीक है, मुझे समझ में नहीं आ रहा है कि आप क्यों नहीं जान पाएंगे कि आपका ईपीएसलॉन क्या है।

लोअर के पुराने दिनों में, मैंने दो कार्यक्रम लिखे जो नेवरविंटर नाइट्स (बायोवेयर द्वारा बनाई गई एक गेम) के साथ काम करते थे। कार्यक्रमों में से एक ने एक बाइनरी मॉडल लिया और इसे ASCII में परिवर्तित कर दिया। दूसरे कार्यक्रम ने एक एएससीआईआई मॉडल लिया और इसे बाइनरी में संकलित किया। मैंने जो परीक्षण लिखे थे उनमें से एक था बायोवेयर के बाइनरी मॉडल लेना, उन्हें एएससीआईआईआई और फिर बाइनरी में वापस लेना। तब मैंने अपने बाइनरी संस्करण की तुलना बायोवेयर से मूल के साथ की। तुलना के दौरान समस्याओं में से एक फ्लोटिंग पॉइंट मानों में कुछ मामूली भिन्नताओं से निपट रहा था। तो प्रत्येक प्रकार के फ्लोटिंग पॉइंट नंबर (वर्टेक्स, सामान्य, आदि) के लिए अलग-अलग ईपीएसलॉन के समूह के साथ आने के बजाय, मैं इस twos तारीफ तुलना जैसे कुछ का उपयोग करना चाहता था। इस प्रकार पूरे एकाधिक EPSILON मुद्दे से परहेज।

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

संपादित करें:

एलओएल, यह विभिन्न लोगों द्वारा ऊपर और नीचे मतदान किया गया है।

मैं समस्या को उबाल दूंगा, दो मनमानी फ़्लोटिंग पॉइंट नंबर दिए गए हैं, आप कैसे निर्णय लेते हैं कि ईपीएसलॉन का उपयोग करना है? आप नहीं कर सकते

एक ईपीएसलॉन के साथ आप 1e23 और 1.0001e23 की तुलना कैसे कर सकते हैं और अभी भी एक ही ईपीएसलॉन का उपयोग करके 1e-23 और 5.2e-23 की तुलना कर सकते हैं? निश्चित रूप से, आप कुछ गतिशील ईपीएसलॉन चाल कर सकते हैं, लेकिन यह पूर्णांक तुलना करने के लिए संपूर्ण बिंदु है (जो पूर्णांक की सटीक आवश्यकता नहीं है)।

पूर्णांक तुलना संख्याओं की परिमाण के सापेक्ष एक ईपीएसलॉन का उपयोग करके दो फ्लोट की तुलना करने में सक्षम है।

संपादित करें

स्टीव, देखते हैं कि आपने टिप्पणियों में क्या कहा था:

"लेकिन आप जानते हैं कि आपके लिए समानता का मतलब क्या है ... इसलिए, आपको उपयुक्त ईपीएसलॉन मिलना चाहिए"।

इस कथन को कहने के लिए चारों ओर मुड़ें:

"यदि आप जानते हैं कि आपके लिए समानता क्या है, तो आपको एक उपयुक्त ईपीएसलॉन मिलना चाहिए।"

मैं जो कहने की कोशिश कर रहा हूं उसका पूरा बिंदु यह है कि ऐसे अनुप्रयोग हैं जहां हम नहीं जानते कि पूर्ण अर्थ में समानता का अर्थ क्या है, इस प्रकार हमें एक सापेक्ष तुलना का सहारा लेना है जो पूर्णांक संस्करण करने का प्रयास कर रहा है।

0
जोड़ा
लेकिन आप जानते हैं कि आपके लिए समानता क्या है ... और आपका कोड उनकी तुलना में एक है। इसलिए, आप एक उपयुक्त ईपीएसलॉन खोजने में सक्षम होना चाहिए।
जोड़ा लेखक Steve Duitsman, स्रोत
Epsilon समस्या डोमेन में काम करता है, अगर आप डोल-अटलांटा से आपको प्राप्त करने के लिए एक सतनाव लिख रहे हैं तो ईपीएसलॉन आपके जीपीएस में अनिश्चितता है
जोड़ा लेखक Martin Beckett, स्रोत
यह सच है, लेकिन मेरा मुद्दा यह है कि जब आपके पास फ्लोट की उत्पत्ति के संदर्भ में कोई संदर्भ नहीं है, तो एक ईपीएसलॉन चुनना बहुत कठिन होगा।
जोड़ा लेखक Torlack, स्रोत

Using any method that compares bitwise will result in trouble when fractions are represented by approximations. All floating point numbers with fractions that are not denominated in powers of two (1/2, 1/4, 1/8, 1/65536, &c) are approximated. So, of course, are all irrational numbers.

फ्लोट तीसरा = 1/3; दो = 2.0 फ्लोट; float another_two = तीसरा * 6.0; अगर (दो! = another_two)    प्रिंट ("अनुमान! \ n");

बिटवाई की तुलना करने का एकमात्र समय काम करेगा जब आप फ्लोटिंग पॉइंट नंबर बिल्कुल उसी तरह प्राप्त करते हैं या वे सटीक प्रतिनिधित्व (पूर्ण संख्याएं, दो की अंश शक्तियां) होते हैं। फिर भी, कुछ संख्याओं के कई प्रस्तुतिकरण हो सकते हैं, हालांकि मैंने इसे कभी भी एक कार्य प्रणाली में नहीं देखा है।

0
जोड़ा
मेरे पास भी नहीं है, यही कारण है कि मैं इसके बारे में उत्सुक हूं।
जोड़ा लेखक Steve Duitsman, स्रोत