Установите среду плавающей точки
#include <fpstatus.h>void fp_setenv( int roundingint flagsint fmaskint excint emask );
-1
. Параметр rounding обрабатывается так же, как в функции fp_rounding().libm
На данный момент функция fp_setenv() определена только для PPC (как для SPE, так и для non-SPE); эта функция не определена для других архитектур.
Функция fp_setenv() представляет собой комбинацию функций fp_rounding() и fp_exception_mask() с добавлением дополнительного функционала. Функция fp_setenv() позволяет:
Для всех ситуациий, описанных выше, затрагивается только вызывающий поток. |
Параметры flags, fmask, exc, и emask представляют собой наборы флагов. Флаги аналогичны тем, что описаны для new_mask parameter функции fp_exception_mask():
После вызова fp_setenv() (прямо или косвенно), исключения, которые не были маскированы, приведут к SIGFPE
, который будет доставлен потоку, когда произойдет соответствующее исключение. Вне зависимости от того, было маскировано исключение или нет, соответствующий флаг исключения (sticky) устанавливается когда произойдет связанное исключение. При установке, флаг исключения (sticky) остается установленным до тех пор, пока не будет очищен потоком приложения.
Данная функция не имеет возвращаемого значения и индикации ошибки. |
Очистить все sticky флаги и разрешить SIGFPE
только для операции деления на ноль; режим округления оставить неизменным:
fp_setenv( -1, 0, _FP_EXC_ALL, _FP_EXC_DIVZERO, _FP_EXC_DIVZERO );
ЗОСРВ «Нейтрино»
fp_exception_mask(), fp_exception_value(), fp_precision() fp_rounding()
Предыдущий раздел: Описание API математической библиотеки