के लिए एक HashSet बनाना एक परिभाषित सहिष्णुता (epsilon
) का उपयोग कर (सीएफ Assert.assertEquals(double, double, double)
के बाद से Double.equals()
का उपयोग कर केवल सटीक समानता के लिए काम करता है और Double
एक अंतिम वर्ग है मैं इसका उपयोग नहीं कर सकता। मेरा प्रारंभिक विचार HashSet
(उदाहरण के लिए DoubleHashSet
) को setEpsilon(double)
विधि के साथ विस्तारित करना है और एक नई कक्षा ComparableDouble
बनाएं जहां equals()
DoubleHashSet
से इस मान का उपयोग करता है। हालांकि मैं यह जांचना चाहता हूं कि मौजूदा समाधान हैं या नहीं पहले से ही और मौजूदा एफ/ओएसएस पुस्तकालय।मैं वास्तविक संख्या के लिए एक <code>HashSet</code> (वर्तमान <code>Double</code> रों पर) बनाना चाहते डबल्स
(वें भविष्य में मैं इसे वास्तविक संख्याओं के tuples में विस्तारित करना चाहता हूं - उदा। आयताकार और क्यूब्स - इसलिए एक सामान्य दृष्टिकोण बेहतर है
नोट: @ एनपीई ने सुझाव दिया है कि यह असंभव है। दुर्भाग्यवश मुझे संदेह है कि यह औपचारिक रूप से सही है :-) तो मैं सोच रहा हूं कि अनुमानित तरीके हैं ... अन्य लोगों को यह समस्या होनी चाहिए और इसे लगभग हल किया जाना चाहिए। (मैं पहले से ही नियमित रूप से एक उपकरण Real.isEqual(a, b, epsilon)
का उपयोग करता हूं और यह बहुत उपयोगी है।) मैं पारगमन की कुछ कम त्रुटियों को स्वीकार करने के लिए तैयार हूं।
नोट: मैं ट्रीसेट का उपयोग करूंगा क्योंकि यह "लगभग बराबर()" की समस्या को हल करता है। बाद में मैं जटिल नर्स, आयताकार (और अधिक जटिल वस्तुओं) की तुलना करूँगा और यह वास्तव में उपयोगी है कि वह एक सीमा निर्धारित करने में सक्षम हो जिसमें 2 चीजें बराबर हों। जटिल नब्स का कोई साधारण प्राकृतिक क्रम नहीं है (शायद एक कैंटर दृष्टिकोण काम करेगा), लेकिन हम बता सकते हैं कि वे लगभग बराबर हैं या नहीं।
आप है यहां सही रास्ते पर दिखने लगते हैं। डबल विस्तार और आपके बराबर कार्यान्वयन प्रदान करना सही दृष्टिकोण प्रतीत होता है। – anubhava
@anubhava OK - मैं टिप्पणी के लिए कुछ डमी कोड जोड़ूंगा –
@anubhava ने कोड को हटा दिया है क्योंकि अन्य उत्तरों ने इसे –