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 = 0x0200
FE_DOWNWARD = 0x0100
отменяя их предыдущие значения.
Если вы скомпилировали приложение со старой версией пакета SDK для Windows (эта проблема зависит от версии пакета SDK, а не версии ОС или VS), может возникнуть эта проблема. Обновите приложение, чтобы выбрать последнюю версию пакета SDK для Windows, чтобы определения FE_UPWARD
и FE_DOWNWARD
соответствовали реализации Windows. Если вы не можете обновить приложение для более поздней версии пакета SDK для Windows, можно определить FE_UPWARD
как 0x0100
и FE_DOWNWARD
как 0x0200
в коде.
Требования
Function | Заголовок C | Заголовок C++ |
---|---|---|
fegetround , fesetround |
<fenv.h> |
<cfenv> |
Дополнительные сведения см. в разделе Совместимость.
См. также
Справочник по алфавитной функции
nearbyint
, , nearbyintf
nearbyintl
rint
, , rintf
rintl
lrint
, , lrintf
llrint
lrintl
llrintf
,llrintl