21.11.2007, 12:39
общий
это ответ
Здравствуйте, denver!
По умолчанию исключения при работе с плавающей точкой отключены. Т.е. при выполнении недопустимой операции, переполнении и проч. результат просто становится "не числом" - INFINITY или NAN (посмотрите в отладчике значение f после присвоения, что-то вроде -1.#INF0000, правда?).
Протестировать результат можно функциями _finite(), _isnan(), _fpclass().
Для разрешения исключений сопроцессора можно использовать _controlfp(), например добавьте в начало Вашей main() следующий код:
// Получаем флаг
int cw = _controlfp( 0, 0 );
// Разрешаем исключения
cw &=~(EM_OVERFLOW|EM_UNDERFLOW|EM_INEXACT|EM_ZERODIVIDE|EM_DENORMAL|EM_INVALID);
// Устанавливаем
_controlfp(cw, MCW_EM);
и успешно вылетите на упомянутой строчке с exception‘ом Invalid floating-point operation.
На этапе компиляции компилятор просто показывает, какой он умный, что видит очевидную нулевую константу в знаменателе оператора деления.
P.S. Упомянутые функции определены в хэдере <float.h>.
Удачи.