MJHD

エモさ駆動開発

VCで、NaNを定義する

GCCCLANGなどにはmath.hNANという定数が含まれている。

しかし、調子に乗ってWindows環境でもコンパイルしてみようとすると、そんな定数ないよと怒られてしまう。 float.hに含まれているよ、と言っているサイトもいくつかあるが、自分の環境では定義されていなかった。

ほかにも、

#include 

#define INFINITY (DBL_MAX+DBL_MAX)
#define NAN (INFINITY-INFINITY)

で定義できるとしている海外のサイトなどもたくさんあったが、自分の環境では、0が出力されるだけであった。

実は、MSDNには以下のように書かれていて、これをdefine文としてそのまま載せてくれているサイトを見つけたので、最終的にはそれを参考にした。

非数 (NAN) 項目 - MSDN

#ifndef NAN

static const unsigned long __nan[2] = {0xffffffff, 0x7fffffff};
#define NAN (*(const float *) __nan)

#endif

参考にしたサイトのURL、メモするの忘れた。