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 <fenv.h>
#include <math.h>
#include <stdio.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

Ссылки

  • Стандарт C23 (ISO/IEC 9899:2024):
    • 7.12.9.3 Функции nearbyint (стр.: TBD)
    • 7.25 Обобщённые по типу математические функции <tgmath.h> (стр.: TBD)
    • F.10.6.3 Функции nearbyint (стр.: TBD)
  • Стандарт C17 (ISO/IEC 9899:2018):
    • 7.12.9.3 Функции nearbyint (стр.: TBD)
    • 7.25 Обобщённые по типу математические функции <tgmath.h> (стр.: TBD)
    • F.10.6.3 Функции nearbyint (стр.: TBD)
  • Стандарт 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/c/numeric/math/nearbyint

Spec-Zone.ru

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