Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Ошибка деления на ноль float/double


Автор: Manaarina 30.5.2011, 16:55
Дали мне задание - написать прогу, которая отлавливает ошибки различные(с помощью __try __except). надо в том числе отловить исключение деления на ноль. Но почему то у меня в Visual Studio(пишу на c++) при компиляции выскакивает не исключение а нормальное такое деление выдающее бесконечность(1.#INF). Вопрос: как заставить выдать исключение?
Код

float Devide(float a, float b)
{
    float c;
    // вот тут возможно исключение
    __try {
        
        c=a/b; //вот тут может вылазить деление на ноль
      
    }
    // вот дальше идет обработка
    __except ((GetExceptionCode() == EXCEPTION_FLT_DIVIDE_BY_ZERO)) 
    {
        system("cls");
        printf("\r Divided by zero. Impossible!");
    }
    return c;
}

Автор: qwerty233 30.5.2011, 20:07
При делении на ноль переменных типа double, float результатом будет + или - бесконечность, просто проверь делитель на равенство нулю, если равен кидай исключение.

Автор: Manaarina 30.5.2011, 21:50
Цитата(qwerty233 @ 30.5.2011,  20:07)
При делении на ноль переменных типа double, float результатом будет + или - бесконечность, просто проверь делитель на равенство нулю, если равен кидай исключение.

В тот то и проблема что в условии задания явно сказано без проверки вводимых данных.

Автор: mes 30.5.2011, 21:56
Цитата(Manaarina @  30.5.2011,  20:50 Найти цитируемый пост)
В тот то и проблема что в условии задания явно сказано без проверки вводимых данных. 

значит нужно делить не floatы, а целые числа.. 

Автор: Manaarina 30.5.2011, 22:28
Цитата(mes @ 30.5.2011,  21:56)
Цитата(Manaarina @  30.5.2011,  20:50 Найти цитируемый пост)
В тот то и проблема что в условии задания явно сказано без проверки вводимых данных. 

значит нужно делить не floatы, а целые числа..

эх... ну ладно спасибо. попробую впихнуть ему ^^

Автор: Manaarina 30.5.2011, 23:30
А тогда ВОПРОС: это вообще к чему такая штука: EXCEPTION_FLT_DIVIDE_BY_ZERO?

Автор: volatile 31.5.2011, 00:10
Manaarina, В студии все не так страшно.
Код

_controlfp(0, EM_ZERODIVIDE);


После этого будут возникать исключения при делении на 0.0

Добавлено @ 00:11

Да, и не забудьте в начале #include <float.h>
исправил.

Автор: Manaarina 31.5.2011, 05:17
Отлично спасибо +)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)