Namespaces
Variants

fegetround, fesetround

From cppreference.net
< c ‎ | numeric ‎ | fenv
Определено в заголовочном файле <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)
округляет до целого числа, используя текущий режим округления с
генерацией исключения, если результат отличается
(функция)
C++ documentation для fegetround , fesetround