std::numeric_limits<T>:: signaling_NaN
|
static
T signaling_NaN
(
)
throw
(
)
;
|
(C++11まで) | |
|
static
constexpr
T signaling_NaN
(
)
noexcept
;
|
(C++11から) | |
浮動小数点型
T
で表現される特殊な値「シグナリング
not-a-number
」を返す。
std::
numeric_limits
<
T
>
::
has_signaling_NaN
==
true
の場合にのみ意味を持つ。IEEE 754(浮動小数点数の最も一般的なバイナリ表現)では、指数部の全ビットがセットされ、仮数部の少なくとも1ビットがセットされている値はNaNを表す。仮数部のどの値がクワイエットNaNまたはシグナリングNaNを表すか、および符号ビットが意味を持つかどうかは実装定義である。
目次 |
戻り値
T
|
std:: numeric_limits < T > :: signaling_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 | 実装定義( FLT_SNAN の場合あり) |
| double | 実装定義( DBL_SNAN の場合あり) |
| long double | 実装定義( LDBL_SNAN の場合あり) |
注記
NaNは決して自身と等価と比較されません。IEEE-754では、NaNのコピーはそのビット表現(符号と payload )を保持することを要求していませんが、ほとんどの実装では保持します。
シグナリングNaNが算術式の引数として使用されると、適切な浮動小数点例外が発生する可能性があり、NaNは「静かになる」、つまり式はクワイエットNaNを返します。
例
シグナリングNaNを使用して浮動小数点例外を発生させる例を示します:
#include <cfenv> #include <iostream> #include <limits> #pragma STDC_FENV_ACCESS on void show_fe_exceptions() { int n = std::fetestexcept(FE_ALL_EXCEPT); if (n & FE_INVALID) std::cout << "FE_INVALID is raised\n"; else if (n == 0) std::cout << "no exceptions are raised\n"; std::feclearexcept(FE_ALL_EXCEPT); } int main() { double snan = std::numeric_limits<double>::signaling_NaN(); std::cout << "After sNaN was obtained, "; show_fe_exceptions(); double qnan = snan * 2.0; std::cout << "After sNaN was multiplied by 2, "; show_fe_exceptions(); double qnan2 = qnan * 2.0; std::cout << "After the quieted NaN was multiplied by 2, "; show_fe_exceptions(); std::cout << "The result is " << qnan2 << '\n'; }
出力:
After sNaN was obtained, no exceptions are raised After sNaN was multiplied by 2, FE_INVALID is raised After the quieted NaN was multiplied by 2, no exceptions are raised The result is nan
関連項目
|
[static]
|
特殊値「シグナリング非数 (signaling not-a-number)」を表現できる浮動小数点型を識別する
(公開静的メンバ定数) |
|
[static]
|
指定された浮動小数点型のクワイエットNaN値を返す
(公開静的メンバ関数) |
|
(C++11)
|
指定された数値がNaNかどうかをチェックする
(関数) |