Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Получает или задает текущий режим округления с плавающей запятой.
Синтаксис
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, , nearbyintfnearbyintl
rint, , rintfrintl
lrint, , lrintfllrintlrintlllrintf,llrintl