Spec-Zone.ru › C++

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)
1-3) Округляет аргумент с плавающей точкой 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

См. также

rintrintfrintllrintlrintflrintlllrintllrintfllrintl
(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)
ближайшее целое число с использованием текущего режима округления с
исключением, если результат отличается
(функция)
roundroundfroundllroundlroundflroundlllroundllroundfllroundl
(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)
ближайшее целое число, округление от нуля в случае середины
(функция)
fegetroundfesetround
(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

Spec-Zone.ru

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