GCCやCLANGなどにはmath.hにNANという定数が含まれている。
しかし、調子に乗ってWindows環境でもコンパイルしてみようとすると、そんな定数ないよと怒られてしまう。 float.hに含まれているよ、と言っているサイトもいくつかあるが、自分の環境では定義されていなかった。
ほかにも、
#include
#define INFINITY (DBL_MAX+DBL_MAX)
#define NAN (INFINITY-INFINITY)
で定義できるとしている海外のサイトなどもたくさんあったが、自分の環境では、0が出力されるだけであった。
実は、MSDNには以下のように書かれていて、これをdefine文としてそのまま載せてくれているサイトを見つけたので、最終的にはそれを参考にした。
#ifndef NAN
static const unsigned long __nan[2] = {0xffffffff, 0x7fffffff};
#define NAN (*(const float *) __nan)
#endif
参考にしたサイトのURL、メモするの忘れた。