std::numeric_limits<T>::signaling_NaN
來自 cppreference.com
static T signaling_NaN() throw(); |
(C++11 前) | |
static constexpr T signaling_NaN() noexcept; |
(C++11 起) | |
返回浮點型別 T
表示的特殊值“發出訊號的非數字 (NaN)”。僅當 std::numeric_limits<T>::has_signaling_NaN == true 時有意義。在 IEEE 754 中,最常見的浮點數二進位制表示方式中,所有指數位都置位且至少有一個小數位也置位的值表示一個 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 不需要保留其位表示(符號和有效載荷),儘管大多數實現會這樣做。
當發出訊號的 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
[編輯] 另請參閱
確定可以表示特殊值“發信的非數”(signaling not-a-number,NaN)的浮點型別 (公共靜態成員常量) | |
[靜態] |
返回給定浮點型別的安靜 NaN 值 (公共靜態成員函式) |
(C++11) |
檢查給定數字是否為 NaN (函式) |