C/C++でNaN
をdouble
またはfloat
に割り当てることは可能ですか? JavaScriptのように:a = NaN
。そのため、後で変数が数値かどうかを確認できます。
Cでは、NAN
は<math.h>
で宣言されます。
C++では、std::numeric_limits<double>::quiet_NaN()
は<limits>
で宣言されます。
ただし、値がNaNであるかどうかを確認するために、別のNaN値と比較することはできません。代わりに、Cの<math.h>
からisnan()
を使用するか、C++の<cmath>
からstd::isnan()
を使用します。
他の人が指摘しているように、あなたはstd::numeric_limits<double>::quiet_NaN()
を探していますが、 cppreference.com ドキュメントを好むと言わざるを得ません。特に、この声明は少し曖昧だからです。
Std :: numeric_limits :: has_quiet_NaN == trueの場合にのみ意味があります。
std::numeric_limits::has_quiet_NaN
のセクションをチェックすると、このサイトでこれが何を意味するかを理解するのは簡単でした:
この定数はすべての浮動小数点型で意味があり、std :: numeric_limits :: is_iec559 == trueの場合にtrueになることが保証されています。
説明したように here if true
は、プラットフォームがIEEE 754
標準をサポートしていることを意味します。この 前のスレッド は、これがほとんどの状況に当てはまることを説明しています。
これは、C++のnumeric_limitsを使用して実行できます。
http://www.cplusplus.com/reference/limits/numeric_limits/
これらはおそらくあなたが見たい方法です:
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.