fegetround, fesetround

Получает или задает текущий режим округления с плавающей запятой.

Синтаксис

int fegetround(void);
int fesetround(int round_mode);

Параметры

round_mode
Задаваемый режим округления в виде одного из округляющих макросов. Если значение не равно одному из макросов округления с плавающей запятой, режим округления не изменяется.

Возвращаемое значение

При успешном выполнении fegetround возвращает режим округления как одно из значений округляющего макроса с плавающей запятой. Возвращается отрицательное значение, если текущий режим округления невозможно определить.

При успешном выполнении fesetround возвращает 0. В противном случае возвращается ненулевое значение.

Замечания

Операции с плавающей запятой могут использовать один из нескольких режимов округления. Эти режимы определяют направление результатов операций с плавающей запятой округляются в сторону при хранении результатов. Ниже приведены имена и поведение макросов с плавающей запятой, определенных в <fenv.h>:

Макрос Description
FE_DOWNWARD Округление в сторону отрицательной бесконечности.
FE_TONEAREST Округление в сторону ближайшего целого числа.
FE_TOWARDZERO Округление к нулю.
FE_UPWARD Округление в сторону положительной бесконечности

Поведение FE_TONEAREST по умолчанию состоит в том, чтобы округить результаты середины между представленными значениями в сторону ближайшего значения с даже (0) наименее значительным битом.

Текущий режим округления затрагивает следующие операции.

  • Преобразование строк.
  • Результаты арифметических операций с плавающей запятой за пределами константных выражений.
  • Округляющие функции библиотеки, такие как rint и nearbyint.
  • Значения, возвращаемые из математических функций стандартной библиотеки.

Текущий режим округления не влияет на эти операции:

  • Функции библиотеки trunc, ceil, floorи lround .
  • Приведения и преобразования с плавающей запятой, которые всегда округляются в сторону нуля.
  • Результаты арифметических операторов с плавающей запятой в константных выражениях, которые всегда округляются в сторону ближайшего целого значения.

Чтобы использовать эти функции, необходимо выключить оптимизации с плавающей запятой, которые могут препятствовать доступу, с помощью директивы #pragma fenv_access(on) перед вызовом. Дополнительные сведения см. в разделе fenv_access.

Важно!

До Windows 10 версии 14393, fenv.h определенных FE_UPWARD = 0x0100 и FE_DOWNWARD = 0x0200. В Windows версии 14393 этот заголовок был обновлен, чтобы устранить ошибку, в которой некоторые API интерпретируются FE_UPWARD как FE_DOWNWARD, и наоборот. Начиная с Windows версии 14393 и FE_UPWARD = 0x0200FE_DOWNWARD = 0x0100отменяя их предыдущие значения. Если вы скомпилировали приложение со старой версией пакета SDK для Windows (эта проблема зависит от версии пакета SDK, а не версии ОС или VS), может возникнуть эта проблема. Обновите приложение, чтобы выбрать последнюю версию пакета SDK для Windows, чтобы определения FE_UPWARD и FE_DOWNWARD соответствовали реализации Windows. Если вы не можете обновить приложение для более поздней версии пакета SDK для Windows, можно определить FE_UPWARD как 0x0100 и FE_DOWNWARD как 0x0200 в коде.

Требования

Функция Заголовок C Заголовок C++
fegetround, fesetround <fenv.h> <cfenv>

Дополнительные сведения см. в разделе Совместимость.

См. также

Справочник по алфавитной функции
nearbyint, , nearbyintfnearbyintl
rint, , rintfrintl
lrint, , lrintfllrintlrintlllrintf,llrintl