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

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

Войти
Регистрация
Восстановить пароль
 
korez
8 / 8 / 0
Регистрация: 22.02.2011
Сообщений: 182
#1

floating point error - C++

04.09.2012, 17:18. Просмотров 703. Ответов 7
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
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).
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.09.2012, 17:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос floating point error (C++):

Floating point error:Overfull - C++
При выполнении программы пишет: Floating point error:Overfull #include&lt;stdio.h&gt; #include&lt;math.h&gt; int main(void) { unsigned n,i; ...

Floating point error:Domain.Abnormal program termination - ??? это что значит? - C++
Floating point error: Domain. Abnormal program termination #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; void main()...

Floating point overflow - C++
Срочно нужна помощь! Когда ввожу значения n=30 и x=30 программа выдает следующую ошибку: &quot;Floating point overflow&quot;. При этом стоит...

Illegal use of floating point - C++
Подскажите, почему с++ ругается на мою функцию: float h (float a, float b) { return h=(a/1+pow(b,2))+(b/1+pow(a,2))-(a-b); } ...

Floating point overflow - C++
помогите с проблемой-создал программу для вычисления уравнений с двумя неизвестными и выдает ошибку Floating point overflow вот кодvoid...

Floating point overflow - C++
Дали елементарное задание решить кубическое уравнение, выдает ошибку &quot;Floating point overflow&quot;, незнаю что с ним делать Входящие даные в...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
04.09.2012, 17:26 #2
значения переменных при переполнении покажи.
1
korez
8 / 8 / 0
Регистрация: 22.02.2011
Сообщений: 182
04.09.2012, 21:16  [ТС] #3
tempsum = 80.013511776622025;
cr = -0.049996376037597656; - это 0.05 представленная в long double
stp1.mass[j].x = 0.029999999329447746 - это 0.03 представленная в long double
j = 122;
i = 2

Добавлено через 14 минут
tempsum = 78.513620529019278;
немного ошибся на один ход
cr = -0.059998035430908203; - это 0.06 представленная в long double
stp1.mass[j].x = 0.039999999105930328 - это 0.04 представленная в long double
j = 123;
i = 1;

Добавлено через 3 часа 13 минут
я разложил цикл получилось что переполнение вызывает
вот это выражение
stp1.mass[j].x * 1000;
0
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
04.09.2012, 21:22 #4
Цитата Сообщение от korez Посмотреть сообщение
получилось что переполнение вызывает
вот это выражение
stp1.mass[j].x * 1000;
и какое значение имеет в этот момент
C++
1
stp1.mass[j].x
?
1
korez
8 / 8 / 0
Регистрация: 22.02.2011
Сообщений: 182
04.09.2012, 22:49  [ТС] #5
stp1.mass[j].x = 0.039999999105930328

Добавлено через 53 секунды
novi4ok, как вообще бороться с переполнением чисел с плавающей точкой?
0
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
04.09.2012, 22:56 #6
т.е. ты хочешь сказать, что при умножении трех сотых на тычесю возникает переполнение? что-то ты не там копал.

Добавлено через 6 минут
Цитата Сообщение от korez Посмотреть сообщение
stp1.mass[j].x = 0.039999999105930328

Добавлено через 53 секунды
novi4ok, как вообще бороться с переполнением чисел с плавающей точкой?
отлавливать и принимать меры. какие еще варианты? подозреваю, эта ситуация бросает особый случай. ловить и действовать по обстоятельствам. или погуглить-почитать, как народ борется. не приходилось вплотную сталкиваться. в фортране когда-то
1
korez
8 / 8 / 0
Регистрация: 22.02.2011
Сообщений: 182
04.09.2012, 23:11  [ТС] #7
как отлавливать (перехватывать?).

Добавлено через 10 минут
сейчас еще раз проверил это точно так
stp1.mass[j].x = 0.039999999105930328;
0
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
05.09.2012, 10:22 #8
а cr?

с "перехватывать" это был неправильный совет. почитал, народ убежден, что эти ситуации нужно предотвращать, используя правильные алгоритмы.
в ассемблере проще, там можно проверять после каждой операции так наз. флаг переполнения. он все равно проверяется, но в случае чего просто получишь результат 1.#INF или что-то подобное.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.09.2012, 10:22
Привет! Вот еще темы с ответами:

Illegal use of floating point - C++
Подскажите в чем может быть дело: int sigmasignal=5,i,j,N=20; float vhmatrica, rsignal; double tsignal=0.2, delta=0.004,...

Ошибка: Illegal use of floating point - C++
В общем вот какое дело: float a,c; c=a%2; объясните, пожалуйста, почему в данном случае нельзя использовать число типа &quot;float&quot;...

Ошибка Illegal use of floating point - C++
Добрый вечер, прошу помочь с ошибкой &quot;Illegal use of floating point&quot; double d=0; double p=0; double z; ...

floating point stack check at 0x00402f75 - C++
Помогите разобраться и решить эту проблему!


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
05.09.2012, 10:22
Ответ Создать тему
Опции темы

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