std::fpclassify
Определено в заголовочном файле <cmath> | ||
|---|---|---|
int fpclassify( float num ); int fpclassify( double num ); int fpclassify( long double num ); | (1) |
(начиная с C++11) (до C++23) |
constexpr int fpclassify( /* floating-point-type */ num ); | (начиная с C++23) | |
| Дополнительные перегрузки | ||
Определено в заголовочном файле <cmath> | ||
template< class Integer > int fpclassify( Integer num ); | (A) | (начиная с C++11) (constexpr начиная с C++23) |
1) Классифицирует значение с плавающей точкой
num по следующим категориям: ноль, субнормальное, нормальное, бесконечное, NAN или категория, определяемая реализацией. Библиотека предоставляет перегрузки std::fpclassify для всех типов с плавающей точкой без квалификаторов cv в качестве типа параметра num.(начиная с C++23)
A) Предоставляются дополнительные перегрузки для всех целочисленных типов, которые обрабатываются как double.
Параметры
| num | - | значение с плавающей точкой или целочисленное значение |
Возвращаемое значение
один из FP_INFINITE, FP_NAN, FP_NORMAL, FP_SUBNORMAL, FP_ZERO или тип, определяемый реализацией, указывающий категорию num.
Примечания
Не требуется предоставлять дополнительные перегрузки точно в виде (A). Достаточно, чтобы для аргумента num целочисленного типа std::fpclassify(num) имела тот же эффект, что и std::fpclassify(static_cast<double>(num)).
Пример
#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
См. также
|
(C++11) | проверяет, имеет ли заданное число конечное значение (функция) |
|
(C++11) | проверяет, является ли заданное число бесконечным (функция) |
|
(C++11) | проверяет, является ли заданное число NaN (функция) |
|
(C++11) | проверяет, является ли заданное число нормальным (функция) |
| предоставляет интерфейс для получения свойств всех фундаментальных числовых типов (шаблон класса) |
|
Документация по C для fpclassify |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/numeric/math/fpclassify