এটি কি NaN
একটি double
বা float
সি / সি ++ এ বরাদ্দ করা সম্ভব ? জাভাস্ক্রিপ্ট মধ্যে মত আপনি না: a = NaN
। সুতরাং পরে আপনি পরীক্ষা করতে পারেন ভেরিয়েবলটি একটি সংখ্যা বা না।
এটি কি NaN
একটি double
বা float
সি / সি ++ এ বরাদ্দ করা সম্ভব ? জাভাস্ক্রিপ্ট মধ্যে মত আপনি না: a = NaN
। সুতরাং পরে আপনি পরীক্ষা করতে পারেন ভেরিয়েবলটি একটি সংখ্যা বা না।
উত্তর:
সি, ইন NAN
ঘোষিত হয় <math.h>
।
সি ++ এ, std::numeric_limits<double>::quiet_NaN()
ঘোষিত হয় <limits>
।
তবে মানটি NaN কিনা তা পরীক্ষা করার জন্য, আপনি এটি অন্য NaN মানের সাথে তুলনা করতে পারবেন না। পরিবর্তে সি isnan()
থেকে <math.h>
, বা সি ++ std::isnan()
থেকে ব্যবহার করুন <cmath>
।
x == x
returns false
x
অন্যরা যেমন চিহ্নিত করেছে আপনি সন্ধান করছেন std::numeric_limits<double>::quiet_NaN()
যদিও আমাকে বলতে হবে আমি cppreferences.com নথি পছন্দ করি । বিশেষত কারণ এই বিবৃতিটি কিছুটা অস্পষ্ট:
শুধুমাত্র অর্থবোধক যদি std :: সংখ্যািক_লিট :: has_quiet_NaN == সত্য হয়।
এবং এই সাইটে এটির অর্থ কী তা নির্ধারণ করা সহজ ছিল, যদি আপনি এর বিভাগটি পরীক্ষা করেন std::numeric_limits::has_quiet_NaN
তবে:
এই ধ্রুবকটি সমস্ত ভাসমান-পয়েন্টের ধরণের জন্য অর্থবহ এবং এটি স্ট্যান্ডার্ড :: সংখ্যাগত_লিট :: is_iec559 == সত্য হলে গ্যারান্টিযুক্ত।
যা এখানে ব্যাখ্যা করা হয়েছেtrue
মানে যদি আপনার প্ল্যাটফর্মটি IEEE 754
মানকে সমর্থন করে। এই পূর্ববর্তী থ্রেডটি ব্যাখ্যা করে এটি বেশিরভাগ পরিস্থিতিতে সত্য হওয়া উচিত।
এটি সি ++ তে সংখ্যাসূচক_লিট ব্যবহার করে করা যেতে পারে:
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 বরাদ্দ করা সম্ভব ...?
হ্যাঁ, C99 সাল থেকে (সি ++ 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)