std::numeric_limits<T>::quiet_NaN
From cppreference.com
static T quiet_NaN() throw(); |
(C++11まで) | |
| static constexpr T quiet_NaN() noexcept; |
(C++11以降) | |
浮動小数点型Tで表現される特殊な値「quiet 非数」(not-a-number)を返します。これは、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] |
与えられた浮動小数点数型の signaling NaN 値を返す (public static member function) |
| (C++11)(C++11)(C++11) |
非数 (not-a-number, NaN) (関数) |
| (C++11) |
与えられた数値が NaN かチェックする (関数) |