gcc環境だと math.h に NAN という定数が定義されている。ところが visual c++ (visual studio)には対応する定義が無い。
環境に依存しない、ポータブルな、移植性の高いコードが必要な場合は、STLを使って
#include <limits> std::numeric_limits<float>::quiet_NaN(); std::numeric_limits<double>::quiet_NaN();
と書けば良い。
なお quiet_NaN() の"quiet"はシグナルを発生させないという意味。浮動小数点関連の仕様を定めているIEEE 754は、2 種類の NaN を用意していて、
- シグナルを発生するNAN (signaling nan)
- シグナルを発生しないNAN (quiet nan)
して区別している。つまりシグナルハンドラから見て、五月蝿い(signaling)か、静か(quiet)か、という分類。
ところで、バッドノウハウのひとつとして、 NAN を 0/0 で実装する方法がある。
const float FLT_NAN = 0.f/0.f;
しかし、これは環境依存であり、使うべきではないらしい。(結果が、不定なのか未定義なのかは未調査)