Отмена обработки особых ситуаций для операций с плавающей точкой
По умолчанию программа Borland C++ в случае переполнения или
деления на ноль в операциях с плавающей точкой аварийно прерывается. Вы можете замаскировать эти особые ситуации для операций с
плавающей точкой, вызывая в main _control87 перед любой операцией
с плавающей точкой. Например:
#include <floar.h>
main() {
_control87(MCW_EM,MCW_EM);
...
}
Можно определить особую ситуацию для операции с плавающей
точкой, вызвав функции _status87 или _clear87.
Определенные математические ошибки могут также произойти в
библиотечных функциях, например, при попытке извлечения квадратного корня из отрицательного числа. По умолчанию в таких случаях
выполняется вывод на экран сообщений об ошибке и возврат значения
NAN (код IEEE "not-a-number" - "не число"). Использование NAN
(нечисловых значений) скорее всего приведет далее к возникновению
особой ситуации с плавающей точкой, которая в свою очередь вызовет, если она не замаскирована, аварийное прерывание программы.
Если вы не желаете, чтобы сообщение выводилось на экран, вставьте
в программу соответствующую версию matherr.
#include <math.h>
int cdecl matherr(struct exception *e)
{
return 1; /* ошибка обработана */
}
Любое другое использование matherr для внутренней обработки
математических ошибок недопустимо, так как она считается устаревшей и может не поддерживаться последующими версиями Borland C++.