Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка деления на ноль float/double 
V
    Опции темы
Manaarina
Дата 30.5.2011, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 4.5.2011

Репутация: нет
Всего: нет



Дали мне задание - написать прогу, которая отлавливает ошибки различные(с помощью __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;
}

PM MAIL   Вверх
qwerty233
Дата 30.5.2011, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 3.10.2010

Репутация: нет
Всего: нет



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

PM MAIL   Вверх
Manaarina
Дата 30.5.2011, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 4.5.2011

Репутация: нет
Всего: нет



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

В тот то и проблема что в условии задания явно сказано без проверки вводимых данных.
PM MAIL   Вверх
mes
Дата 30.5.2011, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



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

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


--------------------
PM MAIL WWW   Вверх
Manaarina
Дата 30.5.2011, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 4.5.2011

Репутация: нет
Всего: нет



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

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

эх... ну ладно спасибо. попробую впихнуть ему ^^
PM MAIL   Вверх
Manaarina
Дата 30.5.2011, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 4.5.2011

Репутация: нет
Всего: нет



А тогда ВОПРОС: это вообще к чему такая штука: EXCEPTION_FLT_DIVIDE_BY_ZERO?
PM MAIL   Вверх
volatile
Дата 31.5.2011, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 16
Всего: 85



Manaarina, В студии все не так страшно.
Код

_controlfp(0, EM_ZERODIVIDE);


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

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

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

Это сообщение отредактировал(а) volatile - 31.5.2011, 01:04
PM MAIL   Вверх
Manaarina
Дата 31.5.2011, 05:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 4.5.2011

Репутация: нет
Всего: нет



Отлично спасибо +)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0470 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.