静かなNaN値を表すC++機能の数に驚きました。私は3つの標準的な方法を見つけました:
std::numeric_limits<T>::quiet_NaN()
-ジェネリック、そして私はそれが選ばれたものだと思ったstd::nan
、std::nanf
、std::nanl
-const char*
引数を受け入れる関数のファミリーNAN
-「静かな非数に評価される」マクロEachこれらのうちC++ 11で導入されました。これに関していくつか質問があります。
const char*
引数はstd::nan
およびcoで何を表しますか?どのように使用されますか?std::nan
、std::nanl
およびstd::nanf
C Mathライブラリから継承されます ; NANマクロ もそうです。それらはすべてCに住んでいます <math.h>
。ただし、@ NicolBolasが示唆しているように、これらはANSI Cの一部ではなく、C言語標準の新しいバージョンであるC99の一部であったため、C++ 11でのみ導入されました。 C++標準委員会は、いわばC互換性を「更新」する努力をしていました。
std::numeric_limits<T>
はC++自体(C++ 11よりかなり前)用に設計されており、それを使用します。
つまり、最終的な答えは、C99の互換性です。