FPGETROUND(3C)
НАЗВАНИЕ
fpgetround, fpsetround, fpgetmask, fpsetmask, fpgetsticky, fpsetsticky - управление окружением выполнения
операций с плавающей точкой (стандарт IEEE)
СИНТАКСИС
#include <ieeefp.h>
typedef enum fp_rnd {
FP_RN = 0, /* округление до ближайшего */
FP_RP = 1, /* округление до большего */
FP_RM = 2, /* округление до меньшего */
FP_RZ = 3 /* округление до целого */
} fp_rnd;
fp_rnd fpsetround ( );
fp_rnd fpsetround (rnd_dir)
fp_rnd rnd_dir;
#define fp_exept int
#define FP_X_INV 0x10 /* некорректная операция */
#define FP_X_OFL 0x08 /* переполнение */
#define FP_X_UFL 0x04 /* потеря значимости */
#define FP_X_DZ 0x02 /* деление на нуль */
#define FP_X_IMP 0x01 /* потеря точности */
fp_exept fpgetmask ( );
fp_exept fpsetmask (mask);
fp_exept mask;
fp_exept fpgetsticky ( );
fp_exept fpsetsticky (sticky);
fp_exept sticky;
ОПИСАНИЕ
Существуют пять исключительных ситуаций, возникающих
при выполнении операций с плавающей точкой: деление на
нуль, переполнение, потеря значимости, потеря точности
и некорректная операция. Когда встречается одна из перечисленных исключительных ситуаций, взводится соответствующий бит навязчивости, и, если взведен соответствующий бит в маске, происходит прерывание. Описываемые функции позволяют изменять реакцию на исключительные ситуации, а также изменять режим округления при
выполнении операций с плавающей точкой.
Функция fpgetround( ) возвращает текущий режим округления.
Функция fpsetround( ) устанавливает новый режим округления и возвращает предыдущий режим.
Функция fpgetmask( ) возвращает текущую маску для обработки исключительных ситуаций.
Функция fpsetmask( ) устанавливает новую маску и возвращает предыдущее значение маски.
Функция fpgetsticky( ) возвращает текущие значения бит
навязчивости.
Функция fpsetsticky( ) устанавливает (или сбрасывает)
биты навязчивости и возвращает предыдущие значения.
СМ. ТАКЖЕ
isnan(3C).
ПРЕДОСТЕРЕЖЕНИЯ
Функции fpsetsticky( ) и fpsetmask( ) изменяют все биты
навязчивости или все биты маски соответственно.
Для преобразования числа с плавающей точкой в целое в
таких языках программирования как C и Фортран-77 необходимо установить режим округления до целого.
ОГРАНИЧЕНИЯ
Чтобы продолжить выполнение после прерывания, необходимо сбросить взведенный бит навязчивости. Если не сделать этого до следующего прерывания, то будет неправильно определен его тип.
Аналогично, перед вызовом fpsetmask( ) необходимо сбросить взведенные биты маски.