Spec-Zone.ru › C

fpclassify

Определено в заголовочном файле <math.h>
#define fpclassify(arg) /* implementation defined */
(начиная с C99)

Классифицирует значение с плавающей точкой arg по следующим категориям: ноль, субнормальное, нормальное, бесконечность, NAN или категория, определяемая реализацией. Макрос возвращает целочисленное значение.

FLT_EVAL_METHOD игнорируется: даже если аргумент вычисляется с большим диапазоном и точностью, чем его тип, сначала он преобразуется к своему семантическому типу, и классификация основывается на этом: нормальное значение типа long double может стать субнормальным при преобразовании в double и нулём при преобразовании в float.

Параметры

arg - значение с плавающей точкой

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

Одно из значений FP_INFINITE, FP_NAN, FP_NORMAL, FP_SUBNORMAL, FP_ZERO или тип, определяемый реализацией, указывающее категорию arg.

Пример

#include <float.h>
#include <math.h>
#include <stdio.h>

const char* show_classification(double x)
{
    switch(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(void)
{
    printf("1.0/0.0 is %s\n", show_classification(1 / 0.0));
    printf("0.0/0.0 is %s\n", show_classification(0.0 / 0.0));
    printf("DBL_MIN/2 is %s\n", show_classification(DBL_MIN / 2));
    printf("-0.0 is %s\n", show_classification(-0.0));
    printf("1.0 is %s\n", show_classification(1.0));
}

Вывод:

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

Ссылки

  • Стандарт C23 (ISO/IEC 9899:2024):
    • 7.12.3.1 Макрос fpclassify (стр.: TBD)
  • Стандарт C17 (ISO/IEC 9899:2018):
    • 7.12.3.1 Макрос fpclassify (стр.: TBD)
  • Стандарт C11 (ISO/IEC 9899:2011):
    • 7.12.3.1 Макрос fpclassify (стр.: 235)
  • Стандарт C99 (ISO/IEC 9899:1999):
    • 7.12.3.1 Макрос fpclassify (стр.: 216)

См. также

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

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

Spec-Zone.ru

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