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.


#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

checks if the given number has finite value
checks if the given number is infinite
checks if the given number is NaN
checks if the given number is normal
provides an interface to query properties of all fundamental numeric types.
(class template)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.