कैसे जांचें कि कोई फ़्लोट नंबर सही संख्या है या नहीं? यही कारण है: यह अनंत, नकारात्मक अनन्तता, NaN नहीं है ...सी ++ में एक फ्लोट एक वास्तविक संख्या है या नहीं?
float f;
???
कैसे जांचें कि कोई फ़्लोट नंबर सही संख्या है या नहीं? यही कारण है: यह अनंत, नकारात्मक अनन्तता, NaN नहीं है ...सी ++ में एक फ्लोट एक वास्तविक संख्या है या नहीं?
float f;
???
std::fpclassify()
से सरल std::isfinite()
निर्धारित करता है कि दिए गए फ्लोटिंग बिंदु संख्या आर्ग परिमित मूल्य अर्थात है यह, सामान्य सामान्य से कम या शून्य, लेकिन नहीं अनंत या NaN है उपयोग करने के लिए है।
std::isnormal() आप क्या चाहते हैं लेकिन यह भी 0.0 के लिए जाँच करता है। तो तुम उस मामले की जाँच कर सकते अतिरिक्त:
float f;
bool isNumber = (std::isnormal(f) || f == 0.0);
संपादित करें: के रूप में user2079303 isnormal
द्वारा बताया यह भी एक subnormal number जो ओ पी शायद नहीं चाहता है के लिए झूठी देता है।
हालांकि, शायद std::isfinite सही बात करता है।
float f;
bool isNumber = std::isfinite(f) ;
यह रिटर्न NaN
और Inf
के लिए false
।
मुझे नहीं लगता कि आप यहां '&&' चाहते हैं। –
@ एनएम। बिल्कुल नहीं .. धन्यवाद – user463035818
क्या आप वाकई ओपी के लिए उपनाम "* सत्य *" संख्या नहीं हैं? – user2079303
सी ++ 11 और उसके बाद, !std::isnan(f) && !std::isinf(f)
का उपयोग करने के लिए न तो नैन और न ही अनंत (सकारात्मक या नकारात्मक) होने के लिए परीक्षण करें।
प्री-सी ++ 11 यह थोड़ा और कठिन है, लेकिन आप अभी भी इसे कर सकते हैं। अपने मंच float
के लिए IEEE754 का उपयोग करता है, तो आप उपयोग कर सकते हैं:
f == f
NaN मामले के लिए false
केवल हो जाएगा। प्रपत्र f == f/2
की
कुछ true
केवल अनंत या कोई संख्या शून्य के करीब के लिए हो जाएगा, और आप तुच्छता से उत्तरार्द्ध मामले को खत्म कर सकते हैं।
बूस्ट (www.boost.org) पूर्व सी ++ 11 के लिए विधियां भी प्रदान करता है। http://www.boost.org/doc/libs/1_41_0/libs/math/doc/sf_and_dist/html/math_toolkit/utils/fpclass.html
'इस्नान' '' – user463035818
के लिए झूठा रिटर्न देता है आपको शायद पूर्व-सी का उल्लेख करना चाहिए आईईईई -754 द्वारा ++ 11 विधियों की गारंटी है लेकिन सी ++ मानक द्वारा नहीं। – user2079303
std::fpclassify() ऐसा लगता है कि आप क्या देख रहे हैं।
int fpclassify(float arg); int fpclassify(double arg); int fpclassify(long double arg); int fpclassify(Integral arg);
वापसी मान
FP_INFINITE
में से एक,FP_NAN
,FP_NORMAL
,FP_SUBNORMAL
,FP_ZERO
या कार्यान्वयन से परिभाषित प्रकार,arg
की श्रेणी का उल्लेख।
आपका मतलब है ['std :: isnan'] (http://en.cppreference.com/w/cpp/numeric/math/isnan) जैसे कार्य? वह सी ++ 11 है लेकिन नौकरी करता है। – tadman
क्या आपने [std :: isfinite] देखा है (http://en.cppreference.com/w/cpp/numeric/math/isfinite) और संबंधित फ़ंक्शंस? –
आपका मतलब * असली * संख्या है?चूंकि यह संख्या सच है यदि यह 0.0 –