2012-03-17 16 views
15

जब हम जावा में आदिम प्रकारों में MIN_VALUE फ़ंक्शन का उपयोग करते हैं तो यह हमें उस प्रकार के लिए न्यूनतम मान प्रदान करता है। लेकिन फ्लोट और डबल के मामले में यह न्यूनतम सकारात्मक मूल्य लौटा, हालांकि फ्लोट और डबल के नकारात्मक मूल्य भी हो सकते हैं।जावा में फ्लोट का न्यूनतम मूल्य सकारात्मक क्यों है?

उत्तर

3

जावा में फ्लोट का न्यूनतम मूल्य सकारात्मक क्यों है?

उन्होंने इस तरह के स्थिरांक का नाम क्यों चुना है, यह असंभव है (हमारे द्वारा) क्योंकि निर्णय लेने पर कमरे में कोई भी कमरे में नहीं था।

इसके अलावा, प्रश्न का उत्तर जानने में मदद नहीं की जा रही है, क्योंकि Float.MIN_VALUE और Double.MIN_VALUE के मान बदले नहीं जाएंगे, इससे कोई फर्क नहीं पड़ता कि वे "गलत" कैसे हो सकते हैं। (यह किसी भी मौजूदा कोड को तोड़ देगा जो इन स्थिरांकों का उपयोग करता है, और जावा डिज़ाइनर केवल ऐसा करते हैं जब कोई अन्य व्यवहार्य विकल्प नहीं होता है। इसे अकेला छोड़ना स्पष्ट रूप से एक व्यवहार्य विकल्प है।)

मुझे लगता है, उत्तर (यानी असली निर्णय के लिए कारण) ब्रांड नई प्रोग्रामिंग भाषाओं के विकास के लिए प्रासंगिक हो सकता है। हालांकि, उन्हें वैसे भी अपने दिमाग बनाने की ज़रूरत है। एफडब्ल्यूआईडब्ल्यू, मैंने इसे इस तरह से डिजाइन नहीं किया होगा, लेकिन यह प्रासंगिक नहीं है।

+0

+1 यह नोट करने के लिए कि प्रश्न को सुनवाई के लिए असंभव की आवश्यकता है। – Mikhail

+0

आप वास्तव में यह नहीं बता सकते कि निर्णय लेने पर कमरे में कोई भी नहीं था :) (मुझे वैसे भी नहीं) – rupps

+0

हालांकि, यह एक बहुत छोटा कमरा था, और जो लोग इसमें थे वे अब बहुत वरिष्ठ होंगे ... या सेवानिवृत्त ... या ... मुझे लगता है कि हम बहुत निश्चित हो सकते हैं। (क्या आपने कभी जेम्स गोस्लिंग को स्टैक ओवरफ्लो पर सवालों का जवाब दिया है?) –

25

MIN_VALUE आपको बताता है कि एक फ्लोट कितना सटीक हो सकता है, लेकिन गणितीय न्यूनतम यह प्रतिनिधित्व नहीं कर सकता है। उन्हें इसे बेहतर नाम देना चाहिए था ...

MAX_VALUE का नकारात्मक फ्लोट के लिए गणितीय न्यूनतम मान है (जो डबल के लिए जाता है)।

कारण आप इस मान सकते हैं कि कैसे संख्या बाइनरी में प्रतिनिधित्व कर रहे हैं के साथ क्या करना है:

जावा नाव और युगल संकेत बिट का उपयोग के रूप में पूर्णांक के लिए दो के पूरक प्रतिनिधित्व करने के लिए विरोध नकारात्मक/सकारात्मक मूल्यों का प्रतिनिधित्व करने के लिए। इसका मतलब है कि यह सकारात्मक और नकारात्मक मूल्य समान परिमाण है, यानी। - (सकारात्मक अधिकतम) = नकारात्मक अधिकतम। इसलिए आपको फ्लोट के लिए वास्तविक गणितीय न्यूनतम स्थिरता को परिभाषित करने की आवश्यकता नहीं है क्योंकि आप ऋणात्मक सीमा के बारे में जानने के लिए केवल सकारात्मक अधिकतम स्थिरता का उपयोग कर सकते हैं। पूर्णांक के लिए, आपको द्विआधारी, i.e. -max! = Min में जिस तरह से प्रदर्शित किया गया है, उसके कारण अधिकतम/मिनट को परिभाषित करने के लिए आपको 2 अलग-अलग स्थिरांक की आवश्यकता होती है।

अधिक जानकारी http://people.uncw.edu/tompkinsj/133/numbers/Reals.htm

+0

यह असंगत नामकरण की व्याख्या नहीं करता है, जो प्रश्न का वास्तविक बिंदु है। –

+0

अच्छा बिंदु, यह बहुत प्रतिद्वंद्वी है ... मुझे लगता है कि उन्हें इसे PRECISION या कुछ नाम देना चाहिए था ... मेरा जवाब संपादित किया –

13

MIN_VALUE लिए EPSILON नाम दिया जाना चाहिए यह सबसे छोटी postive मूल्य एक नाव का प्रतिनिधित्व कर सकते हैं।

चूंकि एक फ्लोट साइन-आयाम एन्कोडिंग का उपयोग करता है, इसलिए फ्लोट का निम्नतम मूल्य -MAX_VALUE का प्रतिनिधित्व कर सकता है।

2

एक संभावित व्याख्या हो सकता है कि जावा सिर्फ सी ++, जो फिर से सी

से नाम विरासत में मिला जावा सी ++, जो एक ही भ्रामक नामकरण पैटर्न के शेयरों से प्रभावित था के रूप में ही नामकरण परंपरा का इस्तेमाल किया।

न्यूनतम परिमित मूल्य: सी ++ में, Float.MIN_VALUE के सादृश्य std::numeric_limits<T>::min() है, जो के रूप में परिभाषित किया जाता है। denormalization (एक्सपोनेंट बिट्स की चर संख्या) के साथ फ़्लोटिंग प्रकार के लिए: न्यूनतम सकारात्मक सामान्यीकृत मूल्य।

न्यूनतम परिमित मूल्य:

C++ में टेम्पलेट कोड में कीड़े का एक संभावित स्रोत है, तो सी ++ 11 में बाद में है कि, वे std::numeric_limits<T>::lowest() है, जो के रूप में परिभाषित किया गया है जोड़ा। (चूंकि सी ++ 11) अभिन्न प्रकारों के लिए: न्यूनतम() के समान। फ़्लोटिंग-पॉइंट प्रकारों के लिए: कार्यान्वयन-निर्भर; आम तौर पर, अधिकतम() के नकारात्मक।

लेकिन सी ++ पहली भाषा नहीं थी। यह सब वापस सी पर जाता है, जो FLT_MIN को न्यूनतम फ़्लोटिंग पॉइंट मान परिभाषित करता है।

तो, सी ने फ़्लोटिंग पॉइंट नंबरों और पूर्णांकों के पूर्णांक को कम करने के लिए क्यों चुना?

सुनिश्चित नहीं है, लेकिन इसे समरूपता के साथ करना पड़ सकता है (this answer देखें)। फ्लोट्स के लिए, आप -FLT_MAX (या -Float.MAX_VALUE) का उपयोग कर सकते हैं। पूर्णांक के लिए, अधिकतम मान को अस्वीकार करना पोर्टेबल नहीं है। वास्तव में, यह सभी आधुनिक वास्तुकलाओं पर आम तौर पर गलत है (जहां -INT_MAX == INT_MIN + 1 होना चाहिए)।

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