CodeNet / Языки программирования / C / C++ / Руководства и справочные материалы по C/C++ / Справочники по функциям / Справочник по функциям C/C++
_fpreset
_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; }