Здравствуйте, cserg, Вы писали:
C>Здравствуйте, Vaynamond, Вы писали:
V>>Гуру, подскажите пожалуйста, как правильно под Windows отлавливать исключения FPU на C/C++ ?
V>>Пытаюсь с помощью SEH — целочисленное деление на 0 отлавливает, а double не хочет. Т.е. EXCEPTION_FLT_DIVIDE_BY_ZERO вообще мимо кассы.
C>По умолчанию прерывания от плавающей точки замаскированы. Размаскировать можно используя _control87, _controlfp, __control87_2.
Огромное спасибо!
Я неправильно задал параметры для _controlfp.
V>>Можно, конечно, проверять _statusfp(), и это срабатывает, но зачем тогда EXCEPTION_FLT_* ?
C>В статье есть пример, когда деление на ноль, не выбрасывающее исключения, может быть полезным. Там же есть пример, как сделать чтобы выбрасывалось исключение. Код из статьи я не проверял.
Пример проверил на MSVS 2010, работает корректно.