Функция Выполняет рестарт математического пакета операций
с плавающей точкой.
Синтаксис #include
void _fpreset();
Файл, содержащий float.h
прототип
Описание Функция _fpreset выполняет рестарт математического
пакета операций с плавающей точкой. Данная функ-
ция обычно используется вместе с функциями
signal, system, или функциями exec... или
spawn...
Примечание. При работе под операционной системой
DOS, если в программе используется математический
сопроцессор 80x87, "дочерний" процесс (выполняе-
мый посредством функций system, exec... или
spawn...), может изменить состояние операций с
плавающей точкой "родительского" процесса.
Если вы используете сопроцессор 80x87, примите
следующие предосторожности:
- Не вызывайте функции exec..., spawn... или
system, пока выражение с плавающей точкой не вы-
числено.
- Для установки операций с плавающей точкой после
использования функций system, exec... или
spawn... вызывайте функцию _fpreset (если только
есть какой-либо шанс выполнения дочерним процес-
сом операций с плавающей точкой, посредством соп-
роцессора 8087/80287).
Возвращаемое Отсутствует.
значение
Смотрите также clear7, _control7, exec.., spawn..,
_status7, system
Пример:
#include
#include
#include
#include
#include
#include
jmp_buf reenter;
/* определим программу обработки ошибочных ситуаций операций с
плавающей точкой */
void float_trap(int sig)
{
printf("Прерывание по ошибке операций с плавающей точкой.\n");
printf("Для продолжения работы нажмите любую клавишу...\n");
getch();
/* рестарт сопроцессора или эмулятора */
_fpreset();
/* вернутся в точку, в которой возникла ошибка */
longjmp(reenter,-1);
}
int main(void)
{
float one = 3.14, two = 0.0;
/* установить программу обработки исключительных ситуаций операций
с плавающей точкой */
if(signal(SIGFPE,float_trap) == SIG_ERR)
{
printf("Ошибка при установке программы обработки прерываний\n");
exit(3);
}
printf("Генерация математической ошибки. Нажмите клавишу...\n");
getch();
if(setjmp(reenter)==0)
one /* two;
printf("Возврат после обработки прерывания.\n");
return 0;
}