Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
MousePro
49 / 30 / 1
Регистрация: 25.04.2013
Сообщений: 366
#1

Проверить вычисления на переполнение и потерю точности - C++

14.08.2014, 19:37. Просмотров 393. Ответов 1
Метки нет (Все метки)

Надо написать функции арифметических действий с проверкой переполнения,потери и генерировать исключение если оно случается.
Вообщем то как бы все просто, в функции сделать операцию в более широком типе и проверить с помощью констант INT_MAX, получается что для целочисленных типов максимум ULLONG_MAX.
Как проверить выше ULLONG_MAX и какой максимум для dobule - 1.79769e+308?

Добавлено через 10 минут
Выполнить операцию поразрядно в char массив например, посчитать разряды и если их больше то переполнение?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.08.2014, 19:37     Проверить вычисления на переполнение и потерю точности
Посмотрите здесь:
C++ Не точности вычисления C++
Вычисления до заданной точности C++
Проверить int на переполнение C++
Проверить массив на переполнение C++
Вычислить сумму ряда. Вычисления заканчивать при достижении заданной степени точности C++
Проверить правильность вычисления по формулам C++
C++ Вычисления массива (проверить код)
Создать программу вычисления указанной величины; результат проверить при заданных исходных значениях C++
C++ Создать программу вычисления указанной величины. Результат проверить при заданных исходных значениях.
Ошибка точности C++
C++ Вычисление точности числа
C++ Вычисление машинной точности

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6444 / 3083 / 306
Регистрация: 04.12.2011
Сообщений: 8,495
Записей в блоге: 4
16.08.2014, 01:32     Проверить вычисления на переполнение и потерю точности #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
bool IsNumber(double x) 
    {
        // This looks like it should always be true, 
        // but it's false if x is a NaN.
        return (x == x); 
    }
 
//Here DBL_MAX is a constant defined in float.h as the largest double that can be represented.
 
bool IsFiniteNumber(double x) 
    {
        return (x <= DBL_MAX && x >= -DBL_MAX); //можно разделить еа две булевых ф-ции, если интересно какое именно переполнение + или - infinity
    }
Подробнее:
http://www.johndcook.com/IEEE_exceptions_in_cpp.html
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru