Spec-Zone.ru › C++

std::fpclassify

Определено в заголовочном файле <cmath>
int fpclassify( float num );
int fpclassify( double num );
int fpclassify( long double num );
(1) (начиная с 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/cpp/numeric/math/fpclassify

Spec-Zone.ru

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