2010-08-20 5 views
20

में न्यूनतम नकारात्मक फ्लोट मान प्राप्त करें, मैं std::numeric_limits<float>::min/max() पर देख रहा था लेकिन ऐसा लगता है कि 'min()' सबसे छोटा पूर्ण मूल्य देता है, न्यूनतम मान नहीं।सी ++

-std::numeric_limits<float>::max() का उपयोग करना सुरक्षित है, यानी न्यूनतम/अधिकतम सीमाओं में फ्लोट सममित है?

+0

क्या यह न्यूनतम नकारात्मक या अधिकतम नकारात्मक मूल्य है? – Chubsdad

+0

_smallest_ संख्या एक फ्लोट पकड़ सकता है। मुझे लगता है कि _technically_ unambiguous है क्योंकि -1 0 से छोटा है, लेकिन मेरा मतलब है "सबसे बड़ी परिमाण के साथ नकारात्मक मूल्य" –

+0

यदि आपका कंपाइलर गारंटी देता है कि आपको आईईईई 754 फ्लोटिंग-पॉइंट नंबर या पर्याप्त पर्याप्त अनुमान मिलता है, तो प्रतिनिधित्व करने योग्य फ्लोट का सेट सममित है और आप '-std :: numeric_limits :: अधिकतम()' –

उत्तर

22

आईईईई 754 चल बिन्दु संख्या, पर हस्ताक्षर किए सत्ता (बल्कि दुक्की पूरक की तरह कुछ की तुलना में) के लिए एक संकेत बिट उपयोग करती हैं इसलिए यदि आपको लगता है कि यकीन है कि कर रहे हैं आपका कंपाइलर/प्लेटफॉर्म उस प्रतिनिधित्व का उपयोग करता है (बहुत आम) तो आप -std::numeric_limits<float>::max() का उपयोग कर सकते हैं जैसा कि आपको संदेह है।

+0

Google मुझे यहाँ लाया गया। धन्यवाद! : पी – TravisG

18

उपयोग std :: numeric_limits :: सबसे कम()

static _Ty __CRTDECL lowest() _THROW0() 
    { // return most negative value 
    return (-(max)()); 
    } 
+1

http://www.cplusplus.com/reference/std/limits/numeric_limits/ का उपयोग कर सकते हैं - इसमें 'निम्नतम' का उल्लेख नहीं है, क्या यह है मानक? –

+0

@ जॉन: हाँ ++ 0x पर, सी ++ 98 पर नहीं। – kennytm

+0

@ केनीटीएम: धन्यवाद। मैं उस के सी ++ 0x भाग पर अनजान था। – Chubsdad

4

हां, float न्यूनतम/अधिकतम मूल्यों में सममित है।

यदि आप अपने अधिकतम मूल्य के लिए सूची खोजने में प्रारंभिक मूल्य के रूप में निम्नतम प्रतिनिधित्व योग्य मान का उपयोग कर रहे हैं, तो इसके बजाय अनंतता का उपयोग करने पर विचार करें।

std::numeric_limits<T>::has_infinity() किसी भी सांख्यिक प्रकार यह है और std::numeric_limits<T>::infinity() एक मूल्य है कि हमेशा उस प्रकार के लिए किसी भी अन्य गैर NaN मूल्य से अधिक का मूल्यांकन करता है वापस आ जाएगी कि के लिए true वापस आ जाएगी। इस मूल्य को अस्वीकार किया जा सकता है और किसी और चीज से कम मूल्यांकन करेगा।