Функция
Выполняет рестарт математического пакета операций с плавающей точкой.
Синтаксис
#include<float.h>
void _fpreset();
Прототип
float.h
Описание
Функция _fpreset выполняет рестарт математического пакета операций с плавающей точкой. Данная функция обычно используется вместе с функциями signal, system, или функциями exec... или spawn...
Примечание. При работе под операционной системой DOS, если в программе используется математический сопроцессор 80x87, «дочерний» процесс (выполняемый посредством функций system, exec... или spawn...), может изменить состояние операций с плавающей точкой «родительского» процесса.
Если вы используете сопроцессор 80x87, примите следующие предосторожности:
- не вызывайте функции exec..., spawn... или system, пока выражение с плавающей точкой не вычислено.
- для установки операций с плавающей точкой после использования функций system, exec... или spawn... вызывайте функцию _fpreset (если только есть какой-либо шанс выполнения дочерним процессом операций с плавающей точкой, посредством сопроцессора 8087/80287).
Возвращаемое значение
Отсутствует.
Переносимость
_fpreset уникальна для DOS.
Пример
#include<stdio.h>
#include<float.h>
#include<setjmp.h>
#include<signal.h>
#include<process.h>
#include<conio.h>
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)
printf("Возврат после обработки прерывания.\n");
return 0;
}