Spec-Zone.ru › C++

FP_NORMAL, FP_SUBNORMAL, FP_ZERO, FP_INFINITE, FP_NAN

Определено в заголовке <cmath>
#define FP_NORMAL    /* implementation defined */
(с C++11)
#define FP_SUBNORMAL /* implementation defined */
(с C++11)
#define FP_ZERO      /* implementation defined */
(с C++11)
#define FP_INFINITE  /* implementation defined */
(с C++11)
#define FP_NAN       /* implementation defined */
(с C++11)

Макросы FP_NORMAL, FP_SUBNORMAL, FP_ZERO, FP_INFINITE, FP_NAN каждый представляет собой отдельную категорию чисел с плавающей точкой. Все они расширяются до целочисленного константного выражения.

Константа Объяснение
FP_NORMAL указывает, что значение является нормальным, т.е. не является бесконечностью, субнормальным, числом не является числом или нулём
FP_SUBNORMAL указывает, что значение является субнормальным
FP_ZERO указывает, что значение является положительным или отрицательным нулём
FP_INFINITE указывает, что значение не может быть представлено базовым типом (положительная или отрицательная бесконечность)
FP_NAN указывает, что значение является числом, не являющимся числом (NaN)

Пример

#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

См. также

fpclassify
(C++11)
классифицирует данное значение с плавающей точкой
(функция)
Документация на C для FP_categories

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

Spec-Zone.ru

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