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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> отловить переполнение, типа float 
:(
    Опции темы
susanin
Дата 27.9.2008, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



здравствуйте. помогите разобраться с проблемой.дали задание, написать функцию суммирования чисел, которая будет заносить результат в определенную ячейку и возвращать флаг переполнения
грубо говоря вот что есть..

int summa(float a, float b, float *c)//с это ячейка в которую занесем результат
{
    try
    {
    *c=a+b;
    } catch(overflow_error &e){return 1;}

    return 0;
}
как отловить переполнение? что написать в блоке catch?
PM MAIL   Вверх
J0ker
Дата 27.9.2008, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(susanin @ 27.9.2008,  19:19)
здравствуйте. помогите разобраться с проблемой.дали задание, написать функцию суммирования чисел, которая будет заносить результат в определенную ячейку и возвращать флаг переполнения
грубо говоря вот что есть..

int summa(float a, float b, float *c)//с это ячейка в которую занесем результат
{
    try
    {
    *c=a+b;
    } catch(overflow_error &e){return 1;}

    return 0;
}
как отловить переполнение? что написать в блоке catch?

5/5
Код

If during the evaluation of an expression, the result is not mathematically defined or not in the range of representable
values for its type, the behavior is undefined

такие исключения не ловятся стандартными средствами C++


--------------------
user posted image
PM MAIL   Вверх
susanin
Дата 27.9.2008, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



J0ker, а как можно тогда вернуть флаг переполнения?
PM MAIL   Вверх
J0ker
Дата 27.9.2008, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



для float смотреть в сторону функций finite, isnan, fpclass
для целочисленных есть обработчик переполнения при делении на ноль
вспомню - напишу


--------------------
user posted image
PM MAIL   Вверх
J0ker
Дата 27.9.2008, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



для винды смотрите set_se_translator и __try, __except


--------------------
user posted image
PM MAIL   Вверх
cutwater
Дата 27.9.2008, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



В принципе можно вставку ассемблера сделать чтобы получить флаг переполнения.


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

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

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

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

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


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

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


 




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


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

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