Re: Обработка исключений FPU на C++
От: kov_serg Россия  
Дата: 17.11.24 16:58
Оценка:
Здравствуйте, Vaynamond, Вы писали:

V>Гуру, подскажите пожалуйста, как правильно под Windows отлавливать исключения FPU на C/C++ ?

V>Пытаюсь с помощью SEH — целочисленное деление на 0 отлавливает, а double не хочет. Т.е. EXCEPTION_FLT_DIVIDE_BY_ZERO вообще мимо кассы.
V>Можно, конечно, проверять _statusfp(), и это срабатывает, но зачем тогда EXCEPTION_FLT_* ?

https://en.cppreference.com/w/cpp/numeric/math/isfinite
https://en.cppreference.com/w/cpp/numeric/math/isinf
https://en.cppreference.com/w/cpp/numeric/math/isnan

#include <cmath>
#include <iostream>

double divide(double a,double b) {
    double r=a/b;
    if (!std::isfinite(r)) throw std::overflow_error("Divide by zero exception");
    return r;
}

int main(int argc, char const *argv[]) {
    try {
        double z=divide(1,0);
    } catch(std::overflow_error e) {
        std::cerr<<"ERROR: "<<e.what()<<std::endl;
    }
    return 0;
}


ps: А вы попробуйте целочисленное деление в linux отловить с помощью исключений
Отредактировано 17.11.2024 17:09 kov_serg . Предыдущая версия . Еще …
Отредактировано 17.11.2024 17:07 kov_serg . Предыдущая версия .
Отредактировано 17.11.2024 17:00 kov_serg . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.