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 <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)
См. также
|
(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/c/numeric/math/nearbyint