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) |
arg до целого значения в формате с плавающей точкой, используя текущий режим округления.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)
См. также
|
(C99)(C99)(C99)(C99)(C99)(C99)(C99)(C99)(C99) | округляет до целого с использованием текущего режима округления с исключением, если результат отличается (функция) |
|
(C99)(C99)(C99)(C99)(C99)(C99)(C99)(C99)(C99) | округляет до ближайшего целого числа, округляя от нуля в случае, когда число находится посередине (функция) |
|
(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