Namespaces
Variants

fpclassify

From cppreference.net
< c ‎ | numeric ‎ | math
Common mathematical functions
Functions
Basic operations
(C99)
(C99)
(C99)
(C99) (C99) (C99) (C23)
Maximum/minimum operations
Exponential functions
Power functions
Trigonometric and hyperbolic functions
Nearest integer floating-point
(C99) (C99) (C99)
(C23) (C23) (C23) (C23)
Floating-point manipulation
Narrowing operations
(C23)
(C23)
(C23)
(C23)
(C23)
(C23)
Quantum and quantum exponent
Decimal re-encoding functions
Total order and payload functions
Classification
fpclassify
(C99)
(C99)
(C99)
(C99)
(C23)
Error and gamma functions
(C99)
(C99)
(C99)
(C99)
Types
Macro constants
Special floating-point values
Arguments and return values
Error handling
Fast operation indicators
Определено в заголовочном файле <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)

Смотрите также

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