std::fpclassify (3) - Linux Manuals

std::fpclassify: std::fpclassify


std::fpclassify - std::fpclassify


Defined in header <cmath>
int fpclassify( float arg ); (1) (since C++11)
int fpclassify( double arg ); (2) (since C++11)
int fpclassify( long double arg ); (3) (since C++11)
int fpclassify( IntegralType arg ); (4) (since C++11)

1-3) Categorizes floating point value arg into the following categories: zero, subnormal, normal, infinite, NAN, or implementation-defined category.
4) A set of overloads or a function template accepting the from argument of any integral_type. Equivalent to (2) (the argument is cast to double).


arg - floating point value

Return value

one of FP_INFINITE, FP_NAN, FP_NORMAL, FP_SUBNORMAL, FP_ZERO or implementation-defined type, specifying the category of arg.


// Run this code

  #include <iostream>
  #include <cmath>
  #include <cfloat>

  const char* 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

See also

isfinite checks if the given number has finite value

isinf checks if the given number is infinite

isnan checks if the given number is NaN

isnormal checks if the given number is normal
               provides an interface to query properties of all fundamental numeric types.
numeric_limits (class template)