Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
_fpreset / f / Библиотечн. функции Borland C++
_fpreset
Функция Выполняет рестарт математического пакета операций
-->
Функция Выполняет рестарт математического пакета операций
с плавающей точкой.
Синтаксис #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.
Смотрите также clear87, _control87, exec..., spawn...,
_status87, system.
Пример:
#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)
one /* two;
printf("Возврат после обработки прерывания.\n");
return 0;
}