В версии С99 заголовком <fenv.h> объявляются функции, которые имеют доступ к среде вычислений с плавающей точкой. Эти функции описаны в табл. 20.2. Заголовок <fenv.h> также определяет типы fenv_t и fexcept_t, которые представляют конфигурацию вычислителя, реализующего среду вычислений с плавающей точкой и флаги состояния этого вычислителя соответственно. Макрос FE_DFL_ENV задает указатель на действующую по умолчанию конфигурацию вычислителя, реализующего среду вычислений с плавающей точкой, определенную при запуске программы.
Определены также следующие макросы исключений, возникающих при работе с числами с плавающей точкой:
FE_DIVBYZERO FE_INEXACT FE_INVALID
FE_OVERFLOW FE_UNDERFLOW FE_ALL_EXCEPT
Все комбинации этих макросов, полученные с помощью операции ИЛИ, можно сохранять в объекте типа int.
Определены также следующие макросы, используемые для указания направления округления значений:
FE_DOWNWARD FE_TONEAREST FE_TOWARDZERO FE_UPWARD
Для проверки флагов вычислителя, реализующего среду вычислений с плавающей точкой, необходимо установить специальную директиву (прагму) для компилятора FENV_ACCESS в положение «включено». Разрешен ли доступ к этим флагам по умолчанию, зависит от конкретной реализации.
Функция | Назначение |
---|---|
| Сбрасывает исключения, заданные параметром ex |
| В переменной, адресуемой указателем fptr, сохраняет состояние флагов исключений вычислителя, реализующего среду вычислений с плавающей точкой, заданных параметром ex |
| Возбуждает исключения, заданные параметром ex |
| Устанавливает флаги состояния вычислителя, реализующего среду вычислений с плавающей точкой, заданные параметром ex, в состояние флагов, содержащихся в объекте, адресуемом параметром fptr |
| Выполняет операцию поразрядного ИЛИ над флагами заданными параметром ex, и текущими флагами вычислителя, реализующего среду вычислений с плавающей точкой. Возвращает результат этой операции |
| Возвращает значение действующего направления округления |
| Устанавливает значение текущего направления округления с помощью параметра direction. При успешном выполнении возвращается нуль |
| В объект, адресуемый параметром envptr, записывается конфигурация вычислителя, реализующего среду вычислений с плавающей точкой |
| Устанавливает безостановочную обработку исключения, возникшего при выполнении вычислений с плавающей точкой. Сохраняет конфигурацию вычислителя, реализующего среду вычислений с плавающей точкой, в переменной, адресуемой параметром envptr, и сбрасывает флаги состояния. При успешном выполнении возвращает нуль |
| Устанавливает конфигурацию вычислителя, реализующего среду вычислений с плавающей точкой, равной значению переменной, адресуемой параметром envptr, но исключения с плавающей точкой при этом не возбуждаются. Объект, адресуемый параметром envptr, должен быть получен в результате вызова функции fegetenv() или функции feholdexcept() |
| Устанавливает конфигурацию вычислителя, реализующего среду вычислений с плавающей точкой, равной значению переменной, адресуемой параметром envptr. Сначала сохраняет любые текущие исключения, а затем, после установки конфигурации вычислителя в соответствии со значением переменной, адресуемой параметром envptr, возбуждает эти исключения. Объект, адресуемый параметром envptr, должен быть получен путем вызова функции fegetenv() или функции feholdexcept() |