क्या यह C / C ++ में NaNa doubleया असाइन करना संभव है float? जावास्क्रिप्ट में जैसा आप करते हैं: a = NaN। इसलिए बाद में आप जांच सकते हैं कि चर एक संख्या है या नहीं।
क्या यह C / C ++ में NaNa doubleया असाइन करना संभव है float? जावास्क्रिप्ट में जैसा आप करते हैं: a = NaN। इसलिए बाद में आप जांच सकते हैं कि चर एक संख्या है या नहीं।
जवाबों:
सी में, NANमें घोषित किया जाता है <math.h>।
C ++ में, std::numeric_limits<double>::quiet_NaN()में घोषित किया जाता है <limits>।
लेकिन यह जाँचने के लिए कि क्या मान NaN है, आप इसकी तुलना दूसरे NaN मान से नहीं कर सकते। इसके बजाय का उपयोग isnan()से <math.h>सी में, या std::isnan()से <cmath>C ++ में।
x == xरिटर्न falseiff xNaN है।
जैसा कि दूसरों ने बताया है कि आप देख रहे हैं, std::numeric_limits<double>::quiet_NaN()हालांकि मुझे कहना है कि मैं cppreference.com दस्तावेज़ पसंद करता हूँ । खासकर क्योंकि यह कथन थोड़ा अस्पष्ट है:
केवल सार्थक अगर std :: num_limits :: has_quiet_NaN == सच है।
और यह पता लगाना आसान था कि इस साइट पर इसका क्या मतलब है, यदि आप इस पर उनके खंड की जांच करते std::numeric_limits::has_quiet_NaNहैं:
यह स्थिरांक सभी फ्लोटिंग-पॉइंट प्रकारों के लिए सार्थक है और यह सच होने की गारंटी है यदि std :: न्यूमेरिक_लिमिट्स :: is_iec559 == सच है।
जैसा कि यहां बताया गया है यदि trueइसका मतलब है कि आपका मंच IEEE 754मानक का समर्थन करता है। यह पिछले सूत्र बताते हैं कि यह अधिकांश स्थितियों के लिए सही होना चाहिए।
यह C ++ में संख्यात्मक_लिमिट्स का उपयोग करके किया जा सकता है:
http://www.cplusplus.com/reference/limits/numeric_limits/
ये वे विधियाँ हैं जिन्हें आप शायद देखना चाहते हैं:
infinity() T Representation of positive infinity, if available.
quiet_NaN() T Representation of quiet (non-signaling) "Not-a-Number", if available.
signaling_NaN() T Representation of signaling "Not-a-Number", if available.
क्या यह संभव है कि NaN को C में डबल या फ्लोट के लिए असाइन किया जाए ...?
हां, C99 के बाद से, (C ++ 11) <math.h>निम्न कार्य प्रदान करता है:
#include <math.h>
double nan(const char *tagp);
float nanf(const char *tagp);
long double nanl(const char *tagp);
जो उनके strtod("NAN(n-char-sequence)",0)समकक्षों की तरह हैं और NANअसाइनमेंट के लिए हैं।
// Sample C code
uint64_t u64;
double x;
x = nan("0x12345");
memcpy(&u64, &x, sizeof u64); printf("(%" PRIx64 ")\n", u64);
x = -strtod("NAN(6789A)",0);
memcpy(&u64, &x, sizeof u64); printf("(%" PRIx64 ")\n", u64);
x = NAN;
memcpy(&u64, &x, sizeof u64); printf("(%" PRIx64 ")\n", u64);
नमूना उत्पादन: (कार्यान्वयन निर्भर)
(7ff8000000012345)
(fff000000006789a)
(7ff8000000000000)