fp_setenv()

Установите среду плавающей точки

Прототип:

#include <fpstatus.h>
void fp_setenv( int rounding
int flags
int fmask
int exc
int emask );

Аргументы:

exc
Изменить маску исключений потока. Этот параметр аналогичен flags.
emask
Изменить маску исключений потока. Этот параметр аналогичен fmask. Это та же маска, с которой работает функция fp_exception_mask().
flags
Описать флаги исключения (sticky), которые установлены или сброшены. Для каждого флага, установленного в fmask, устанавливается соответствующий флаг исключений (sticky) потока, если этот флаг установлен в flags; в противном случае, он будет сброшен. Флаги исключения (sticky) для которых соответствующий флаг не задан в fmask остаются неизменными.
fmask
Описать флаги исключения (sticky), которые установлены или сброшены. Для каждого флага, установленного в fmask, устанавливается соответствующий флаг исключений (sticky) потока, если этот флаг установлен в flags; в противном случае, он будет сброшен. Флаги исключения (sticky) для которых соответствующий флаг не задан в fmask остаются неизменными.
rounding
Режим округления. Чтобы использовать текущий, используйте значение -1. Параметр rounding обрабатывается так же, как в функции fp_rounding().

Библиотека:

libm

Описание:

На данный момент функция fp_setenv() определена только для PPC (как для SPE, так и для non-SPE); эта функция не определена для других архитектур.

Функция fp_setenv() представляет собой комбинацию функций fp_rounding() и fp_exception_mask() с добавлением дополнительного функционала. Функция fp_setenv() позволяет:


Note: Для всех ситуациий, описанных выше, затрагивается только вызывающий поток.

Параметры flags, fmask, exc, и emask представляют собой наборы флагов. Флаги аналогичны тем, что описаны для new_mask parameter функции fp_exception_mask():

_FP_EXC_INVALID
_FP_EXC_DIVZERO
_FP_EXC_OVERFLOW
_FP_EXC_UNDERFLOW
_FP_EXC_INEXACT
_FP_EXC_DENORMAL

После вызова fp_setenv() (прямо или косвенно), исключения, которые не были маскированы, приведут к SIGFPE, который будет доставлен потоку, когда произойдет соответствующее исключение. Вне зависимости от того, было маскировано исключение или нет, соответствующий флаг исключения (sticky) устанавливается когда произойдет связанное исключение. При установке, флаг исключения (sticky) остается установленным до тех пор, пока не будет очищен потоком приложения.

Возвращаемое значение:


Note: Данная функция не имеет возвращаемого значения и индикации ошибки.

Примеры:

Очистить все 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 математической библиотеки