名稱空間
變體
操作

std::numeric_limits<T>::signaling_NaN

來自 cppreference.com
< cpp‎ | 型別‎ | 數值限制
 
 
 
 
 
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
(函式) [編輯]