std::numeric_limits<T>::quiet_NaN
cppreference.netより
static T quiet_NaN() throw();
|
(C++11未満) | |
static constexpr T quiet_NaN() noexcept;
|
(C++11以上) | |
特殊な値「quiet Not-a-Number」を返します。これは浮動小数点型 T で表現されます。std::numeric_limits<T>::has_quiet_NaN == true の場合にのみ意味があります。IEEE 754(浮動小数点数の最も一般的なバイナリ表現)では、指数部のすべてのビットが設定され、仮数部の少なくとも1ビットが設定された値はNaNを表します。仮数部のどの値がquiet NaNまたはsignaling NaNを表すか、および符号ビットが意味を持つかどうかは処理系定義です。
戻り値
T
|
std:: numeric_limits < T > :: quiet_NaN ( ) |
| /* 特殊化されていない場合 */ | T ( ) |
| bool | false |
| char | 0 |
| signed char | 0 |
| unsigned char | 0 |
| wchar_t | 0 |
| char8_t (C++20以降) | 0 |
| char16_t (C++11以降) | 0 |
| char32_t (C++11以降) | 0 |
| short | 0 |
| unsigned short | 0 |
| int | 0 |
| unsigned int | 0 |
| long | 0 |
| unsigned long | 0 |
| long long (C++11以降) | 0 |
| unsigned long long (C++11以降) | 0 |
| float | 実装定義( NAN の場合あり) |
| double | 実装定義 |
| long double | 実装定義 |
注記
NaNは決して自身と等価と比較されません。NaNのコピーはそのビット表現を保持しない場合があります。
例
NaNを生成するいくつかの方法(出力文字列はコンパイラ依存):
このコードを実行
#include <iostream> #include <limits> #include <cmath> int main() { std::cout << std::numeric_limits<double>::quiet_NaN() << ' ' // nan << std::numeric_limits<double>::signaling_NaN() << ' ' // nan << std::acos(2) << ' ' // nan << std::tgamma(-1) << ' ' // nan << std::log(-1) << ' ' // nan << std::sqrt(-1) << ' ' // -nan << 0 / 0.0 << '\n'; // -nan std::cout << "NaN == NaN? " << std::boolalpha << ( std::numeric_limits<double>::quiet_NaN() == std::numeric_limits<double>::quiet_NaN() ) << '\n'; }
出力例:
nan nan nan nan nan -nan -nan NaN == NaN? false
関連項目
|
[static]
|
浮動小数点型が特殊値「quiet not-a-number」(NaN)を表現できるかどうかを識別する
(public static member constant) |
|
[static]
|
指定された浮動小数点型のシグナリングNaN値を返す
(public static member function) |
|
(C++11)
(C++11)
(C++11)
|
非数(NaN)
(function) |
|
(C++11)
|
指定された数値がNaNかどうかをチェックする
(function) |