Spec-Zone.ru › C++

std::fpclassify

Определено в заголовке <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)
(constexpr с C++23)
1) Категоризирует значение с плавающей запятой num в следующие категории: ноль, субнормальное, нормальное, бесконечное, NaN или категория, определённая реализацией. Библиотека предоставляет перегрузки std::fpclassify для всех типов с плавающей запятой без квалификаторов cv, в качестве типа параметра num.(с C++23)
A) Дополнительные перегрузки предоставляются для всех целочисленных типов, которые обрабатываются как double.

Параметры

num - значение с плавающей запятой или целое число

Возвращаемое значение

одно из FP_INFINITE, FP_NAN, FP_NORMAL, FP_SUBNORMAL, FP_ZERO или типа, определённого реализацией, указывающего категорию num.

Примечания

Дополнительные перегрузки не обязаны предоставляться точно как (A). Они должны быть достаточными для обеспечения того, что для их аргумента num целого типа, std::fpclassify(num) имеет тот же эффект, что и std::fpclassify(static_cast<double>(num)).

Пример

#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

См. также

isfinite
(C++11)
проверяет, имеет ли данное число конечное значение
(функция)
isinf
(C++11)
проверяет, является ли данное число бесконечным
(функция)
isnan
(C++11)
проверяет, является ли данное число NaN
(функция)
isnormal
(C++11)
проверяет, является ли данное число нормальным
(функция)
numeric_limits
предоставляет интерфейс для запроса свойств всех основных числовых типов
(шаблон класса)
Документация на C для fpclassify

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/numeric/math/fpclassify

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API