名稱空間
變體
操作

std::isnan

來自 cppreference.com
< cpp‎ | 數值‎ | 數學
 
 
 
常用數學函式
函式
基本操作
(C++11)  
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)(C++11)(C++11)
指數函式
(C++11)
(C++11)

(C++11)
(C++11)
冪函式
(C++11)
(C++11)
三角
雙曲函式
(C++11)
(C++11)
(C++11)

誤差函式和伽馬函式
(C++11)
(C++11)
(C++11)
(C++11)
取整浮點運算
(C++11)(C++11)(C++11)
(C++11)
(C++11)
(C++11)(C++11)(C++11)
浮點操縱函式
(C++11)(C++11)
(C++11)
(C++11)
(C++11)(C++11)
(C++11)
分類和比較
(C++11)
(C++11)
(C++11)
isnan
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
型別
(C++11)
(C++11)
(C++11)
宏常量
分類
(C++11)(C++11)(C++11)(C++11)(C++11)


 
定義於標頭檔案 <cmath>
(1)
bool isnan( float num );

bool isnan( double num );

bool isnan( long double num );
(C++11 起)
(直至 C++23)
constexpr bool isnan( /*floating-point-type*/ num );
(C++23 起)
SIMD 過載 (C++26 起)
定義於標頭檔案 <simd>
template< /*數學浮點型別*/ V >

constexpr typename /*推導的 simd 型別*/<V>::mask_type

  isnan ( const V& v_num );
(S) (C++26 起)
定義於標頭檔案 <cmath>
template< class Integer >
bool isnan( Integer num );
(A) (C++11 起)
(C++23 起為 constexpr)
1) 確定給定的浮點數 num 是否為非數字 (NaN) 值。 庫為所有 cv-不限定的浮點型別作為引數 num 的型別提供了過載。(C++23 起)
S) SIMD 過載在 v_num 上執行逐元素 std::isnan
(有關它們的定義,請參閱 math-floating-pointdeduced-simd-t。)
(C++26 起)
A) 為所有整數型別提供了額外的過載,它們被視為 double

目錄

[編輯] 引數

num - 浮點值或整數值
v_num - 一個 std::basic_simd 特化的資料並行物件,其元素型別為浮點型別

[編輯] 返回值

1) 如果 num 是 NaN,則為 true,否則為 false
S) 一個數據並行掩碼物件,其中對於範圍 [0v_num.size()) 內的所有 i,其第 i 個元素如果 v_num[i] 是 NaN 則等於 true,否則等於 false

[編輯] 注意

存在許多具有不同符號位和載荷的不同 NaN 值,參見 std::nanstd::numeric_limits::quiet_NaN

NaN 值永遠不與自身或其他 NaN 值相等。根據 IEEE-754,複製 NaN 不要求保留其位表示(符號和載荷),儘管大多數實現都會這樣做。

另一種測試浮點值是否為 NaN 的方法是將其與自身進行比較:bool is_nan(double x) { return x != x; }

GCCClang 支援 -ffinite-math 選項(也由 -ffast-math 暗含),該選項允許相應的編譯器假定不存在特殊的 IEEE-754 浮點值,例如 NaN、無窮大或負零。換句話說,在此選項下,std::isnan 被假定總是返回 false

不要求提供的額外過載與 (A) 完全相同。它們只需足以確保對於整數型別的引數 numstd::isnan(num) 具有與 std::isnan(static_cast<double>(num)) 相同的效果。

[編輯] 示例

#include <cfloat>
#include <cmath>
#include <iostream>
 
int main()
{
    std::cout << std::boolalpha
              << "isnan(NaN) = " << std::isnan(NAN) << '\n'
              << "isnan(Inf) = " << std::isnan(INFINITY) << '\n'
              << "isnan(0.0) = " << std::isnan(0.0) << '\n'
              << "isnan(DBL_MIN/2.0) = " << std::isnan(DBL_MIN / 2.0) << '\n'
              << "isnan(0.0 / 0.0)   = " << std::isnan(0.0 / 0.0) << '\n'
              << "isnan(Inf - Inf)   = " << std::isnan(INFINITY - INFINITY) << '\n';
}

輸出

isnan(NaN) = true
isnan(Inf) = false
isnan(0.0) = false
isnan(DBL_MIN/2.0) = false
isnan(0.0 / 0.0)   = true
isnan(Inf - Inf)   = true

[編輯] 另請參見

(C++11)(C++11)(C++11)
非數字(NaN)
(函式) [編輯]
對給定浮點值進行分類
(函式) [編輯]
(C++11)
檢查給定數字是否具有有限值
(函式) [編輯]
(C++11)
檢查給定數字是否為無窮大
(函式) [編輯]
(C++11)
檢查給定數字是否為正常數
(函式) [編輯]
檢查兩個浮點值是否無序
(函式) [編輯]
C 文件,關於 isnan