Spec-Zone.ru › C

nearbyint, nearbyintf, nearbyintl

Определено в заголовке <math.h>
float       nearbyintf( float arg );
(1) (с C99)
double      nearbyint( double arg );
(2) (с C99)
long double nearbyintl( long double arg );
(3) (с C99)
Определено в заголовке <tgmath.h>
#define nearbyint( arg )
(4) (с C99)
1-3) Округляет аргумент с плавающей точкой arg до целого значения в формате с плавающей точкой, используя текущий режим округления.
4) Универсальный макрос типа: Если arg имеет тип long double, вызывается nearbyintl. В противном случае, если arg имеет целочисленный тип или тип double, вызывается nearbyint. В противном случае, вызывается nearbyintf соответственно.

Параметры

arg - значение с плавающей точкой

Возвращаемое значение

Возвращается ближайшее целое значение к arg, в соответствии с текущим режимом округления.

Обработка ошибок

Эта функция не подвержена ошибкам, указанным в math_errhandling.

Если реализация поддерживает арифметику с плавающей точкой IEEE (IEC 60559),

  • FE_INEXACT никогда не генерируется
  • Если arg равно ±∞, оно возвращается без изменений
  • Если arg равно ±0, оно возвращается без изменений
  • Если arg равно NaN, возвращается NaN

Примечания

Единственное отличие между nearbyint и rint заключается в том, что nearbyint никогда не генерирует FE_INEXACT.

Наибольшие представимые значения с плавающей точкой — точные целые числа во всех стандартных форматах с плавающей точкой, поэтому nearbyint никогда не переполняется сам по себе; однако результат может переполнить любой целочисленный тип (включая intmax_t), когда он хранится в целочисленной переменной.

Если текущий режим округления — FE_TONEAREST, эта функция округляет до ближайшего чётного значения в случае, когда число находится посередине (например, rint, но в отличие от round).

Пример

#include <stdio.h>
#include <math.h>
#include <fenv.h>
 
int main(void)
{
#pragma STDC FENV_ACCESS ON
    fesetround(FE_TONEAREST);
    printf("rounding to nearest:\nnearbyint(+2.3) = %+.1f  ", nearbyint(2.3));
    printf("nearbyint(+2.5) = %+.1f  ", nearbyint(2.5));
    printf("nearbyint(+3.5) = %+.1f\n", nearbyint(3.5));
    printf("nearbyint(-2.3) = %+.1f  ", nearbyint(-2.3));
    printf("nearbyint(-2.5) = %+.1f  ", nearbyint(-2.5));
    printf("nearbyint(-3.5) = %+.1f\n", nearbyint(-3.5));
 
    fesetround(FE_DOWNWARD);
    printf("rounding down: \nnearbyint(+2.3) = %+.1f  ", nearbyint(2.3));
    printf("nearbyint(+2.5) = %+.1f  ", nearbyint(2.5));
    printf("nearbyint(+3.5) = %+.1f\n", nearbyint(3.5));
    printf("nearbyint(-2.3) = %+.1f  ", nearbyint(-2.3));
    printf("nearbyint(-2.5) = %+.1f  ", nearbyint(-2.5));
    printf("nearbyint(-3.5) = %+.1f\n", nearbyint(-3.5));
 
    printf("nearbyint(-0.0) = %+.1f\n", nearbyint(-0.0));
    printf("nearbyint(-Inf) = %+.1f\n", nearbyint(-INFINITY));
}

Вывод:

rounding to nearest:
nearbyint(+2.3) = +2.0  nearbyint(+2.5) = +2.0  nearbyint(+3.5) = +4.0
nearbyint(-2.3) = -2.0  nearbyint(-2.5) = -2.0  nearbyint(-3.5) = -4.0
rounding down: 
nearbyint(+2.3) = +2.0  nearbyint(+2.5) = +2.0  nearbyint(+3.5) = +3.0
nearbyint(-2.3) = -3.0  nearbyint(-2.5) = -3.0  nearbyint(-3.5) = -4.0
nearbyint(-0.0) = -0.0
nearbyint(-Inf) = -inf

Ссылки

  • Стандарт C11 (ISO/IEC 9899:2011):
    • 7.12.9.3 Функции nearbyint (с. 251-252)
    • 7.25 Универсальные математические функции <tgmath.h> (с. 373-375)
    • F.10.6.3 Функции nearbyint (с. 526)
  • Стандарт C99 (ISO/IEC 9899:1999):
    • 7.12.9.3 Функции nearbyint (с. 232)
    • 7.22 Универсальные математические функции <tgmath.h> (с. 335-337)
    • F.9.6.3 Функции nearbyint (с. 463)

См. также

rintrintfrintllrintlrintflrintlllrintllrintfllrintl
(C99)(C99)(C99)(C99)(C99)(C99)(C99)(C99)(C99)
округляет до целого с использованием текущего режима округления
с исключением, если результат отличается
(функция)
roundroundfroundllroundlroundflroundlllroundllroundfllroundl
(C99)(C99)(C99)(C99)(C99)(C99)(C99)(C99)(C99)
округляет до ближайшего целого числа, округляя от нуля в случае, когда число находится посередине
(функция)
fegetroundfesetround
(C99)(C99)
получает или устанавливает направление округления
(функция)
Документация C++ для nearbyint

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/numeric/math/nearbyint

Spec-Zone.ru

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