std::nearbyint, std::nearbyintf, std::nearbyintl
Определено в заголовке <cmath> |
||
|---|---|---|
| (1) | ||
float nearbyint ( float num ); double nearbyint ( double num ); long double nearbyint ( long double num ); |
(до C++23) | |
/* floating-point-type */
nearbyint ( /* floating-point-type */ num );
|
(с C++23) | |
float nearbyintf( float num ); |
(2) | (с C++11) |
long double nearbyintl( long double num ); |
(3) | (с C++11) |
| Дополнительные перегрузки (с C++11) | ||
Определено в заголовке <cmath> |
||
template< class Integer > double nearbyint ( Integer num ); |
(A) |
num до целого значения в формате с плавающей точкой, используя текущий режим округления.текущий режим округления. Библиотека предоставляет перегрузки std::nearbyint для всех типов с плавающей точкой без квалификаторов cv в качестве типа параметра.(с C++23)
| A) Предоставляются дополнительные перегрузки для всех целочисленных типов, которые обрабатываются как double. | (с C++11) |
Параметры
| num | - | значение с плавающей точкой или целое |
Возвращаемое значение
Возвращается ближайшее целое значение к num, в соответствии с текущим режимом округления.
Обработка ошибок
Эта функция не подвержена ошибкам, указанным в math_errhandling.
Если реализация поддерживает арифметику с плавающей точкой IEEE (IEC 60559),
-
FE_INEXACTникогда не генерируется. - Если
numравно ±∞, оно возвращается без изменений. - Если
numравно ±0, оно возвращается без изменений. - Если
numравно NaN, возвращается NaN.
Примечания
Единственное различие между std::nearbyint и std::rint заключается в том, что std::nearbyint никогда не генерирует FE_INEXACT.
Наибольшие представимые значения с плавающей точкой являются точными целыми числами во всех стандартных форматах с плавающей точкой, поэтому std::nearbyint никогда не переполняется сам по себе; однако результат может переполнить любой целочисленный тип (включая std::intmax_t), при сохранении в целочисленной переменной.
Если текущий режим округления — FE_TONEAREST, эта функция округляет до четного в случае, когда значение находится посередине (например, std::rint, но в отличие от std::round).
Дополнительные перегрузки не обязаны предоставляться точно как (A). Они должны быть достаточными, чтобы гарантировать, что для своего аргумента num целочисленного типа, std::nearbyint(num) имеет тот же эффект, что и std::nearbyint(static_cast<double>(num)).
Пример
#include <cfenv>
#include <cmath>
#include <iostream>
#pragma STDC FENV_ACCESS ON
int main()
{
std::fesetround(FE_TONEAREST);
std::cout << "rounding to nearest: \n"
<< "nearbyint(+2.3) = " << std::nearbyint(2.3)
<< " nearbyint(+2.5) = " << std::nearbyint(2.5)
<< " nearbyint(+3.5) = " << std::nearbyint(3.5) << '\n'
<< "nearbyint(-2.3) = " << std::nearbyint(-2.3)
<< " nearbyint(-2.5) = " << std::nearbyint(-2.5)
<< " nearbyint(-3.5) = " << std::nearbyint(-3.5) << '\n';
std::fesetround(FE_DOWNWARD);
std::cout << "rounding down:\n"
<< "nearbyint(+2.3) = " << std::nearbyint(2.3)
<< " nearbyint(+2.5) = " << std::nearbyint(2.5)
<< " nearbyint(+3.5) = " << std::nearbyint(3.5) << '\n'
<< "nearbyint(-2.3) = " << std::nearbyint(-2.3)
<< " nearbyint(-2.5) = " << std::nearbyint(-2.5)
<< " nearbyint(-3.5) = " << std::nearbyint(-3.5) << '\n';
std::cout << "nearbyint(-0.0) = " << std::nearbyint(-0.0) << '\n'
<< "nearbyint(-Inf) = " << std::nearbyint(-INFINITY) << '\n';
}Вывод:
rounding to nearest: nearbyint(+2.3) = 2 nearbyint(+2.5) = 2 nearbyint(+3.5) = 4 nearbyint(-2.3) = -2 nearbyint(-2.5) = -2 nearbyint(-3.5) = -4 rounding down: nearbyint(+2.3) = 2 nearbyint(+2.5) = 2 nearbyint(+3.5) = 3 nearbyint(-2.3) = -3 nearbyint(-2.5) = -3 nearbyint(-3.5) = -4 nearbyint(-0.0) = -0 nearbyint(-Inf) = -inf
См. также
|
(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11) |
ближайшее целое число с использованием текущего режима округления с исключением, если результат отличается (функция) |
|
(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11) |
ближайшее целое число, округление от нуля в случае середины (функция) |
|
(C++11)(C++11) |
получает или устанавливает направление округления (функция) |
C документация для nearbyint |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/numeric/math/nearbyint