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)
См. также
|
(C99) | проверяет, имеет ли заданное число конечное значение (макрос функции) |
|
(C99) | проверяет, является ли заданное число бесконечным (макрос функции) |
|
(C99) | проверяет, является ли заданное число NaN (макрос функции) |
|
(C99) | проверяет, является ли заданное число нормальным (макрос функции) |
Документация по C++ для fpclassify |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/c/numeric/math/fpclassify