Namespaces
Variants

std:: isnan

From cppreference.net
Common mathematical functions
Nearest integer floating point operations
(C++11)
(C++11)
(C++11) (C++11) (C++11)
Floating point manipulation functions
(C++11) (C++11)
(C++11)
(C++11)
Classification and comparison
(C++11)
(C++11)
(C++11)
isnan
(C++11)
(C++11)
(C++11)
Types
(C++11)
(C++11)
(C++11)
Macro constants
ヘッダーで定義 <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>
template < /*math-floating-point*/ V >

constexpr typename /*deduced-simd-t*/ < 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)値であるかどうかを判定する。 ライブラリは、パラメータ num の型として、すべてのcv修飾されていない浮動小数点型に対するオーバーロードを提供する。 (C++23以降)
S) SIMDオーバーロードは v_num に対して要素ごとに std::isnan を実行します。
(詳細は math-floating-point および deduced-simd-t を参照)
(C++26以降)
A) すべての整数型に対して追加のオーバーロードが提供されており、これらは double として扱われます。

目次

パラメータ

num - 浮動小数点または整数値
v_num - 要素型が浮動小数点型である std::basic_simd 特殊化のデータ並列オブジェクト

戻り値

1) true num がNaNの場合、 false がそれ以外の場合。
S) データ並列マスクオブジェクト。範囲 [ 0 , v_num. size ( ) ) 内の全ての i について、i 番目 の要素は v_num [ i ] がNaNの場合 true 、それ以外の場合 false に等しい。

注記

異なる符号ビットとペイロードを持つ多くの異なるNaN値が存在します。詳細は std::nan および std::numeric_limits::quiet_NaN を参照してください。

NaN値はそれ自身または他のNaN値と決して等しく比較されません。IEEE-754では、NaNのコピーはそのビット表現(符号と payload )を保持する必要はありませんが、ほとんどの実装では保持されます。

浮動小数点値がNaNであるかどうかをテストする別の方法は、それを自分自身と比較することです: bool is_nan ( double x ) { return x ! = x ; } .

GCC および Clang -ffinite-math オプション( -ffast-math によって暗黙的に含まれる)をサポートしており、これにより各コンパイラはNaN、無限大、負のゼロなどの特殊なIEEE-754浮動小数点値が存在しないと仮定することができます。言い換えると、このオプション下では std::isnan は常に false を返すと仮定されます。

追加のオーバーロードは (A) と完全に同一である必要はありません。整数型の引数 num に対して、 std :: 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++11)
指定された数値が正規化数かどうかをチェックする
(関数)
2つの浮動小数点値が非順序かどうかをチェックする
(関数)