Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.09.2012, 01:20   #1
awzq
 
Регистрация: 24.05.2011
Сообщений: 3
По умолчанию floating point overflow

Код:
int i = 124; int j = 0; "c" и "y" это float с диапазоном от 1 до 2; 
x это long double от 0.01 до 100; 
tempsum - long double; cr - long double;
--------------------------------------------------------------------------
for(; i>0; i--, j++)
{   cr = *c - (stp1.mass[j].y);
            correctmul(&cr, &csp, stp1);
    tempsum += (cr * stp1.mass[j].x * 1000);} //<--- overflow
в указанной строке происходит переполнение
мненужно только 5 знаков после запятой в самом крайнем случае.
с этой ошибкой я довольно часто сталкиваюсь так что мне нужно както решить ее основательно. раньше я просто увеличивал точность(double-> long double).

я разложил цикл получилось что переполнение вызывает
вот это выражение
stp1.mass[j].x * 1000;
awzq вне форума Ответить с цитированием
Старый 05.09.2012, 07:54   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
x это long double от 0.01 до 100;
Тут long не нужен.
Покажи весь код, если он небольшой можно его оттрассировать и понять в чем причина.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.09.2012, 13:54   #3
awzq
 
Регистрация: 24.05.2011
Сообщений: 3
По умолчанию

весь код очень большой это один case
http://www.cyberforum.ru/cpp-beginne...ead646687.html

tempsum = 78.513620529019278;
cr = -0.059998035430908203; - это 0.06 представленная в long double
stp1.mass[j].x = 0.039999999105930328 - это 0.04 представленная в long double
j = 123;
i = 1;

я разложил цикл получилось что переполнение вызывает
вот это выражение
stp1.mass[j].x * 1000;

как вообще бороться с floating point overflow на с++
awzq вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Floating point overflow Ania Lunee Помощь студентам 4 18.05.2012 22:01
Floating point division by zero flouwjke Помощь студентам 2 27.04.2012 19:26
Чтение файла в массив и построение графика TChart, floating point overflow А здесь смотрели? vitalyisaev2 C++ Builder 1 09.11.2010 21:36
s not a valid floating point value prod87 Помощь студентам 1 02.12.2009 20:57
Delphi, "Floating point overflow" что делать? xMass Помощь студентам 12 02.04.2009 01:37