std::fpclassify(3)

NAME
std::fpclassify - std::fpclassify

Synopsis
   Defined in header <cmath>
   int fpclassify( float arg ); (1) (since C++11)
                        (constexpr since C++23)
   int fpclassify( double arg ); (2) (since C++11)
                        (constexpr since C++23)
   int fpclassify( long double arg ); (3) (since C++11)
                        (constexpr since C++23)
   int fpclassify( IntegralType arg ); (4) (since C++11)
                        (constexpr since C++23)
   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 arg argument of any
   integral type. Equivalent to (2) (the argument is cast to double).

Parameters
   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.

Example
// 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';
 }

Output:
 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
   (C++11) (function)
   isinf checks if the given number is infinite
   (C++11) (function)
   isnan checks if the given number is NaN
   (C++11) (function)
   isnormal checks if the given number is normal
   (C++11) (function)
                  provides an interface to query properties of all fundamental numeric
   numeric_limits types.
                  (class template)