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 <stdio.h>
#include <math.h>
#include <float.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

Ссылки

  • Стандарт 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/w/c/numeric/math/fpclassify

Spec-Zone.ru

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