Yanıtlar:
C'de NAN
beyan edilir<math.h>
.
C ++ ' std::numeric_limits<double>::quiet_NaN()
da <limits>
.
Ancak bir değerin NaN olup olmadığını kontrol etmek için onu başka bir NaN değeriyle karşılaştıramazsınız. Bunun yerine kullanmak isnan()
gelen <math.h>
veya C std::isnan()
den <cmath>
C ++.
x == x
döner false
IFF x
NaN olur.
Diğerlerinin de belirttiği gibi std::numeric_limits<double>::quiet_NaN()
, cppreference.com belgelerini tercih ettiğimi söylemem gerekse de aradığınızı söylediler . Özellikle bu ifade biraz belirsiz olduğu için:
Sadece std :: numeric_limits :: has_quiet_NaN == true ise anlamlıdır.
ve bu sitede bunun ne anlama geldiğini anlamak basitti, eğer sitedeki bölümlerine bakarsanız std::numeric_limits::has_quiet_NaN
:
Bu sabit tüm kayan nokta türleri için anlamlıdır ve eğer std :: numeric_limits :: is_iec559 == true ise doğru olduğu garanti edilir.
hangi olarak açıklanabilir burada eğer true
vasıtasıyla, platform destekleyen IEEE 754
standart. Bu önceki ileti dizisi , bunun çoğu durum için doğru olması gerektiğini açıklıyor.
Bu, C ++ 'daki numeric_limits kullanılarak yapılabilir:
http://www.cplusplus.com/reference/limits/numeric_limits/
Muhtemelen bakmak isteyeceğiniz yöntemler şunlardır:
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.
Bu, C ... 'deki double veya float'a bir NaN atamak mümkün müdür?
Evet, C99 olduğundan (C ++ 11) <math.h>
aşağıdaki işlevleri sunar:
#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)
meslektaşları gibi ve NAN
görevler için.
// 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);
Örnek çıktı: (Uygulamaya bağlı)
(7ff8000000012345)
(fff000000006789a)
(7ff8000000000000)