fegetround, fesetround
|
Определено в заголовочном файле
<fenv.h>
|
||
|
int
fesetround
(
int
round
)
;
|
(1) | (начиная с C99) |
|
int
fegetround
(
)
;
|
(2) | (начиная с C99) |
1) Пытается установить направление округления чисел с плавающей точкой равным аргументу round , который должен быть одним из макросов округления чисел с плавающей точкой .
2) Возвращает значение макроса округления чисел с плавающей точкой соответствующего текущему направлению округления.
Содержание |
Параметры
| round | - | направление округления, одно из макросов округления чисел с плавающей точкой |
Возвращаемое значение
1) 0 при успешном выполнении, иначе ненулевое значение.
2) макрос округления чисел с плавающей точкой описывающий текущее направление округления или отрицательное значение, если направление не может быть определено.
Примечания
Текущий режим округления, отражающий эффекты последнего вызова
fesetround
, также может быть запрошен с помощью
FLT_ROUNDS
.
Пример
#include <fenv.h> #include <math.h> #include <stdio.h> // #pragma STDC FENV_ACCESS ON void show_fe_current_rounding_direction(void) { printf("current rounding direction: "); switch (fegetround()) { case FE_TONEAREST: printf ("FE_TONEAREST"); break; case FE_DOWNWARD: printf ("FE_DOWNWARD"); break; case FE_UPWARD: printf ("FE_UPWARD"); break; case FE_TOWARDZERO: printf ("FE_TOWARDZERO"); break; default: printf ("unknown"); }; printf("\n"); } int main(void) { /* Направление округления по умолчанию */ show_fe_current_rounding_direction(); printf("+11.5 -> %+4.1f\n", rint(+11.5)); /* посередине между двумя целыми числами */ printf("+12.5 -> %+4.1f\n", rint(+12.5)); /* посередине между двумя целыми числами */ /* Сохранить текущее направление округления. */ int curr_direction = fegetround(); /* Временно изменить текущее направление округления. */ fesetround(FE_DOWNWARD); show_fe_current_rounding_direction(); printf("+11.5 -> %+4.1f\n", rint(+11.5)); printf("+12.5 -> %+4.1f\n", rint(+12.5)); /* Восстановить направление округления по умолчанию. */ fesetround(curr_direction); show_fe_current_rounding_direction(); return 0; }
Возможный вывод:
current rounding direction: FE_TONEAREST +11.5 -> +12.0 +12.5 -> +12.0 current rounding direction: FE_DOWNWARD +11.5 -> +11.0 +12.5 -> +12.0 current rounding direction: FE_TONEAREST
Ссылки
- Стандарт C23 (ISO/IEC 9899:2024):
-
- 7.6.3.1 Функция fegetround (стр.: TBD)
-
- 7.6.3.2 Функция fesetround (стр.: TBD)
- Стандарт C17 (ISO/IEC 9899:2018):
-
- 7.6.3.1 Функция fegetround (стр.: TBD)
-
- 7.6.3.2 Функция fesetround (стр.: TBD)
- Стандарт C11 (ISO/IEC 9899:2011):
-
- 7.6.3.1 Функция fegetround (стр. 212)
-
- 7.6.3.2 Функция fesetround (стр. 212-213)
- Стандарт C99 (ISO/IEC 9899:1999):
-
- 7.6.3.1 Функция fegetround (стр. 193)
-
- 7.6.3.2 Функция fesetround (стр. 193-194)
Смотрите также
|
(C99)
(C99)
(C99)
|
округляет до целого числа, используя текущий режим округления
(функция) |
|
(C99)
(C99)
(C99)
(C99)
(C99)
(C99)
(C99)
(C99)
(C99)
|
округляет до целого числа, используя текущий режим округления с
генерацией исключения, если результат отличается (функция) |
|
C++ documentation
для
fegetround
,
fesetround
|
|