名前空間
変種
操作

std::fpclassify

From cppreference.com
< cpp‎ | numeric‎ | math
 
 
 
共通の数学関数
関数
基本的な数学関数
(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)
分類と比較
fpclassify
(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)


 
ヘッダー <cmath> で定義
(1)
int fpclassify( float num );

int fpclassify( double num );

int fpclassify( long double num );
(C++11以降)
(C++23まで)
constexpr int fpclassify( /* floating-point-type */ num );
(C++23から)
ヘッダー <cmath> で定義
template< class Integer >
int fpclassify( Integer num );
(A) (C++11以降)
(C++23 以降 constexpr)
1) 浮動小数点数numを、ゼロ、非正規数、正規数、無限大、NaN(非数)、または実装定義のカテゴリに分類します。ライブラリは、パラメータnumの型として、すべてのcv修飾されていない浮動小数点型に対するstd::fpclassifyのオーバーロードを提供します。(C++23以降)
A) すべての整数型に対する追加のオーバーロードが提供されます。これらは double として扱われます。

目次

[edit] パラメータ

num - 浮動小数点数または整数値

[edit] 戻り値

numのカテゴリを指定する、FP_INFINITEFP_NANFP_NORMALFP_SUBNORMALFP_ZEROのいずれか、または実装定義の型。

[edit] 注意

追加のオーバーロードは、(A)とまったく同じように提供される必要はありません。それらは、整数型の引数numに対して、std::fpclassify(num)std::fpclassify(static_cast<double>(num))と同じ効果を持つことを保証するために十分なものであればよいのです。

[edit]

#include <cfloat>
#include <cmath>
#include <iostream>
 
auto show_classification(double x)
{
    switch (std::fpclassify(x))
    {
        case FP_INFINITE:
            return "Inf";
        case FP_NAN:
            return "NaN";
        case FP_NORMAL:
            return "normal";
        case FP_SUBNORMAL:
            return "subnormal";
        case FP_ZERO:
            return "zero";
        default:
            return "unknown";
    }
}
 
int main()
{
    std::cout << "1.0/0.0 is " << show_classification(1 / 0.0) << '\n'
              << "0.0/0.0 is " << show_classification(0.0 / 0.0) << '\n'
              << "DBL_MIN/2 is " << show_classification(DBL_MIN / 2) << '\n'
              << "-0.0 is " << show_classification(-0.0) << '\n'
              << "1.0 is " << show_classification(1.0) << '\n';
}

出力

1.0/0.0 is Inf
0.0/0.0 is NaN
DBL_MIN/2 is subnormal
-0.0 is zero
1.0 is normal

[edit] 関連項目

(C++11)
与えられた数値が有限値かチェックする
(関数) [編集]
(C++11)
与えられた数値が無限大かチェックする
(関数) [編集]
(C++11)
与えられた数値が NaN かチェックする
(関数) [編集]
(C++11)
与えられた数値が正規化数かチェックする
(関数) [編集]
全ての基本数値型のプロパティを問い合わせるインターフェースを提供する
(クラステンプレート) [編集]
English 日本語 中文(简体) 中文(繁體)