67 / 3 / 2
Регистрация: 20.10.2012
Сообщений: 9
1

Invalid floating point operation в Builder 6.0

20.10.2012, 20:18. Показов 2346. Ответов 9
Метки нет (Все метки)

Здравствуйте. У меня проблема. Несколько месяцев назад делал программы для диплома в Borland C++ Builder 6.0. Потом удалил его. Сейчас установил Builder 2010, но старые файлы в нем не полностью открываются (т.е. можно открыть отдельно оболочку проекта, код и т.д., а запустить все сразу сходу не выходит). Вообщем я решил перенести код старых программ в новые проекты 2010 билдера. Чтобы запустить старые программы поставил опять Builder 6.0, но он не все программы мне смог открыть. Некоторые работают как положено, но в других выдает такое:
Project Progect1.exe raised exception class EInvalidOp with message "Invalid floating point operation".
Причем заметил такую штуку: когда я запускаю просто екзешник старого проекта оно все просчитывает как положено и выдает результат в окне. Если после этого открыть проект в билдере и запустить его там через F9 - выдаст эту ошибку, и соответственно в файле .exe после этого тоже все прекращает работать, а дает "Invalid floating point operation". То есть этот старый билдер как-то "портит" программу.
Есть предположения в чем проблема? Может 2010 и 6.0 конфликтуют как-то?
Заранее спасибо.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.10.2012, 20:18
Ответы с готовыми решениями:

Invalid floating point operation
Как отладить такую ошибку? В функции достаточно много различных вычислений, на ее вход каждый такт...

Invalid floating point operation
определяю массивы, заполняю нулями: float B1, B2; for(int i=0;i<200;i++) {B1=0, B2=0;} В...

Ошибка 'invalid floating point operation'
Здравствуйте. сделал задачу, при вводе значения "0" выдает ошибку, и выкидывает с программы. с чем...

Float - Invalid floating point operation
есть функция float TForm1::Calc( float f2, float f1, float f3, float f4, float C2, float af2,...

9
872 / 448 / 35
Регистрация: 25.10.2011
Сообщений: 910
20.10.2012, 20:27 2
Конфликты вполне возможны, хотя у меня IDE разных версий уживались на одной машине. Но вот касательно данной ошибки - вряд ли. Происходит недопустимая операция, деление на ноль, отрицательное значение при вычислении корня и т.п.
Возможно данные, с которыми происходят непосредственные вычисления - получают некорректным образом. Абстрактно говорить трудно, приведите пример.
0
67 / 3 / 2
Регистрация: 20.10.2012
Сообщений: 9
20.10.2012, 20:42  [ТС] 3
Цитата Сообщение от DefineTrueFalse Посмотреть сообщение
Конфликты вполне возможны, хотя у меня IDE разных версий уживались на одной машине. Но вот касательно данной ошибки - вряд ли. Происходит недопустимая операция, деление на ноль, отрицательное значение при вычислении корня и т.п.
Возможно данные, с которыми происходят непосредственные вычисления - получают некорректным образом. Абстрактно говорить трудно, приведите пример.
Вот только что запустил exe и увидел на экране набор синусоид, а в билдере ошибку.
Я не знаю какой именно надо кусок потому покажу все сразу. Делений и корней нету. Это старая не оптимизированная программа, в которой много лишнего, но все же.

Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Complex j=Complex(0,1), Z, a, c1, c2, c3, c4, c5, c6, c7, c8, z1, z2, I, II, F, U;
long double Zr, Zx, M, iq, id, Ff, Fkd, Fkq, Ff0=0, Fkd0=0, Fkq0=0, Fd0=0, Fq0=0, dFf=0, dFkd=0, dFkq=0, dFd=0, dFq=0, Fd, Fq, Ud=0, Uq=0, Ukd=0, Ukq=0, Uf=0, Pi, h, t, p, Omega, If, ikd, ikq, Rf, Rkd, Rkq, R, Lf, Lkd, Lkq, Lmd, Lmq, Lsig, ia, ib, ic, Lad, Laq, Ld, Lq, w, alfa=0, Ua, Ub, Uc;
 Pi=3.14159265359;
 h=0.0001;
 t=0;
 p=1;
 a=j*sin(2*Pi/3)+cos(2*Pi/3);
 Omega=0.5;
 If=1;
 ikd=0;
 ikq=0;
 Rf=0.07;
 Rkd=0.9;
 Rkq=0.8;
 R=0.015;
 Lf=0.75;
 Lkd=0.75;
 Lkq=0.5;
 Lmd=0.8;
 Lmq=0.427;
 Lsig=0.2;
 ia=1;
 ib=-0.5;
 ic=-0.5;
 Lad=3*Lmd/2;
 Laq=3*Lmq/2;
 Ld=Lad+Lsig;
 Lq=Laq+Lsig;
 w=p*Omega;
 Zr=2;
 Zx=2;
 Z=j*Zx+Zr;
  c1=ib*a;
  c2=a*a;
  c7=ic*c2;
  c3=(c1+c7+ia)*2/3;
  c4=-j*sin(alfa)+cos(alfa);
 for (int i=0; i<300000; i++)
  {
  alfa=Omega*t*p;
  I=c3*c4;
  II=I.conjg();
  id=((I+II)/2).real();
  c8=2*j;
  iq=((I-II)/c8).real();
 
  Fd=floor((Ld*id+Lad*If+Lad*ikd)*10000000)/10000000;
  Fq=floor((Lq*iq+Laq*ikq)*10000000)/10000000;
  F=j*Fq+Fd;
  Ff=floor((Lad*id+If*Lf+ikd*Lad)*10000000)/10000000;
  Fkd=floor((id*Lad+If*Lad+ikd*Lkd)*10000000)/10000000;
  Fkq=floor((iq*Laq+ikd*Lkq)*10000000)/10000000;
 
  if(i<10)
  {
  Fd0=Fd;
  Fq0=Fq;
  Ff0=Ff;
  Fkd0=Fkd;
  Fkq0=Fkq;
  }
 
  Ud=R*id-w*Fq+dFd;
  Uq=R*iq+w*Fd+dFq;
  Uf=Rf*If+dFf;
  Ukd=Rkd*ikd+dFkd;
  Ukq=Rkq*ikq+dFkq;
  c5=j*Uq+Ud;
  c6=j*sin(alfa)+cos(alfa);
  U=c5*c6;
  Ua=U.real();
  z1=U*a;
  Ub=z1.real();
  z2=U*(a*a);
  Uc=z2.real();
  I=U/Z;
  ia=I.real();
  ib=(I*a).real();
  ic=(I*a*a).real();
  M=1.5*p*(Fd*iq-Fq*id);
  Fd0=Fd;
  Fq0=Fq;
  Fkd0=Fkd;
  Fkq0=Fkq;
  Ff0=Ff;
  Series1->AddXY(t,Ua,"");
  Series2->AddXY(t,Ub,"");
  Series3->AddXY(t,Uc,"");
  Series4->AddXY(t,ia,"");
  Series5->AddXY(t,ib,"");
  Series6->AddXY(t,ic,"");
  Series7->AddXY(t,M,"");
  c3=I;
  c4=-j*sin(alfa)+cos(alfa);
  t=t+h;
 }
}
0
LK
Заблокирован
20.10.2012, 22:58 4
системный разделитель дробной части не менялся?
0
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
21.10.2012, 04:56 5
А если отладочном режиме запустить?
0
67 / 3 / 2
Регистрация: 20.10.2012
Сообщений: 9
21.10.2012, 16:29  [ТС] 6
Цитата Сообщение от LK Посмотреть сообщение
системный разделитель дробной части не менялся?
Нет, вообще никаких изменений не делал. Просто поставил билдер и запустил прогу.

Добавлено через 2 минуты
Цитата Сообщение от gumi250 Посмотреть сообщение
А если отладочном режиме запустить?
Да, я смотрел пошагово что там происходит. Оно считает в цикле 4 раза а на пятый выдает ошибку, причем никаких переполнений при этом не происходит, вообще все значения переменных за эти 4 цикла изменяются ничтожно мало.

Добавлено через 2 минуты
Я еще пробовал создать новый проект в билдере 6 и вставить туда старый код, результат все тот же. Потом создал в 2010 и все нарисовало. Теперь просто решил перекинуть код из старых программ в проекты на новом билдере.
Спасибо всем кто отозвался!

P.S. Все таки я думаю билдеры не дружат на одной машине...

Добавлено через 19 минут
Вот может кому интересно. Этот код запускается в 6.0, все прекрасно считает и выводит, а выше приведенный нет, хотя кардинально нового ничего вроде не добавлено.

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Complex j=Complex(0,1), a;
long double Pi, h, t, p, J, w, Uf, Uff, mrf, mif, Mb, Rn, Xn, Rf, R, Lf, Lff, Lmd, Lmq, Lsig, Lad, Laq, Ld, Lq, Me;
long double a11, a12, a13, a21, a22, a23, a31, a32, a33, a41, a42;
long double delta, delta1, delta2, delta3;
long double Ff=0, Fd=0, Fq=0, Ff0=0, Fd0=0, Fq0=0;
long double wn, Un, Pn, In, Fn, Mn, Ln, Zn, tn, Jn;
long double Jo, wo, Ufo, Rno, Xno, Rfo, Ro, Lfo, Lffo, Lmdo, Lmqo, Lsigo, Lado, Laqo, Ldo, Lqo;
 Pi=3.14159265359;
 a=j*sin(2*Pi/3)+cos(2*Pi/3);
 h=0.0001;
 t=0;
 p=3;
 J=0.05;
 w=314.159;
 wn=314.159;
 Un=450;
 Pn=10000;
 Uff=255.816;
 mrf=0.044472574;
 mif=3.871758277;
 Uf=Uff*mrf*mif;
 Rf=8.785*mrf;
 R=1.082;
 Lmd=0.248;
 Lmq=0.056;
 Lsig=0.052;
 Lff=3*Lmd/2;
 Lad=3*Lmd/2;
 Laq=3*Lmq/2;
 Ld=Lad+Lsig;
 Lq=Laq+Lsig;
 Lf=Lff+Lsig*mrf;
 
 Rn=100;
 Xn=100;
 
 In=Pn/(1.5*Un);
 Mn=p*Pn/wn;
 Fn=Un/wn;
 Jn=p*Mn/(wn*wn);
 Ln=Un/(In*wn);
 tn=1/wn;
 Zn=Un/In;
 
 Ufo=Uf/Un;
 wo=w/wn;
 Rfo=Rf/Zn;
 Ro=R/Zn;
 Lado=Lad/Ln;
 Laqo=Laq/Ln;
 Lsigo=Lsig/Ln;
 Ldo=Ld/Ln;
 Lqo=Lq/Ln;
 Lfo=Lf/Ln;
 Rno=Rn/Zn;
 Xno=Xn/Zn;
 Jo=J/Jn;
 
 a11 = -wn*Rfo*Ldo/(Ldo*Lfo-Lado*Lado);
 a12 = wn*Rfo*Lado/(Ldo*Lfo-Lado*Lado);
 a13 = wn*Ufo;
 a21 = wn*(Rno+Ro)*Lado/(Ldo*Lfo-Lado*Lado);
 a22 = -wn*(Rno+Ro)*Lfo/(Ldo*Lfo-Lado*Lado);
 a23 = wn*(wo+Xno/Lqo);
 a31 = wn*Xno*Lado/(Ldo*Lfo-Lado*Lado);
 a32 = -wn*wo-wn*Xno*Lfo/(Ldo*Lfo-Lado*Lado);
 a33 = -wn*(Rno+Ro)/Lqo;
 a41 = Lado/(Ldo*Lfo-Lado*Lado);
 a42 = Lado/Ldo;
 
 delta=a11*a22*a33+a31*a12*a23-a11*a23*a32-a12*a21*a33;
 delta1=-a13*a22*a33+a13*a32*a23;
 delta2=-a13*a23*a31+a13*a21*a33;
 delta3=-a13*a21*a32+a13*a22*a31;
 
 Ff0=delta1/delta;
 Fd0=delta2/delta;
 Fq0=delta3/delta;
 
 for (int i=0; i<50000; i++)
  {
  if (i==20000)
  {
  Rn=150;
  Rno=Rn/Zn;
  a11 = -wn*Rfo*Ldo/(Ldo*Lfo-Lado*Lado);
  a12 = wn*Rfo*Lado/(Ldo*Lfo-Lado*Lado);
  a13 = wn*Ufo;
  a21 = wn*(Rno+Ro)*Lado/(Ldo*Lfo-Lado*Lado);
  a22 = -wn*(Rno+Ro)*Lfo/(Ldo*Lfo-Lado*Lado);
  a23 = wn*(wo+Xno/Lqo);
  a31 = wn*Xno*Lado/(Ldo*Lfo-Lado*Lado);
  a32 = -wn*wo-wn*Xno*Lfo/(Ldo*Lfo-Lado*Lado);
  a33 = -wn*(Rno+Ro)/Lqo;
  a41 = Lado/(Ldo*Lfo-Lado*Lado);
  a42 = Lado/Ldo;
  }
  Ff=Ff0+h*(a11*Ff0+a12*Fd0+a13);
  Fd=Fd0+h*(a21*Ff0+a22*Fd0+a23*Fq0);
  Fq=Fq0+h*(a31*Ff0+a32*Fd0+a33*Fq0);
  Me=a41*Fq0*(Ff0-Fd0*a42);
 
  Series1->AddXY(t,Ff,"");
  Series2->AddXY(t,Fd,"");
  Series3->AddXY(t,Fq,"");
  Series4->AddXY(t,0,"");
//  Series5->AddXY(t,-25,"");
//  Series6->AddXY(t,25,"");
  Series7->AddXY(t,Me,"");
  Ff0=Ff;
  Fd0=Fd;
  Fq0=Fq;
  t=t+h;
  }
}
0
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
21.10.2012, 16:30 7
На какой строке выдает ошибку?
А если строчки с Series в цикле закомментировать, выдаст ошибку?
0
67 / 3 / 2
Регистрация: 20.10.2012
Сообщений: 9
21.10.2012, 16:35  [ТС] 8
Цитата Сообщение от gumi250 Посмотреть сообщение
На какой строке выдает ошибку?
А если строчки с Series в цикле закомментировать, выдаст ошибку?
Ошибку в строке 97
C++
1
  t=t+h;
Если закомментировать ошибок нет
0
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
21.10.2012, 16:43 9
Если закомментировать ошибок нет
У TCharta бывают проблемы при переходе на новые версии.
0
67 / 3 / 2
Регистрация: 20.10.2012
Сообщений: 9
21.10.2012, 16:49  [ТС] 10
Цитата Сообщение от gumi250 Посмотреть сообщение
У TCharta бывают проблемы при переходе на новые версии.
Так в том то и дело, что программа писалась на Builder 6.0 и теперь, когда я опять его установил и им же пытаюсь запустить, выдает ошибку. Я правда не знаю всех нюансов TChart'а, может он у этих двух билдеров один на двоих?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.10.2012, 16:49
Помогаю со студенческими работами здесь

Объясните ошибку - Invalid floating point operation
Invalid floating point operation что это за ошибка???? очень нужно!!

Ошибка invalid floating point operation в cppWebBrowser
Добрый день! Столкнулся с появлением ошибки &quot;invalid floating point operation&quot; при выполнении кода ...

Invalid Floating Point Operation при выводе графика
Привет и доброго времени суток. вообщем создавая курсовую прогу, она считает изгиб и прогибы...

Invalid floating point operation при попытке нарисовать график
Возникла следующая проблема: По непонятной мне причине на строке ...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru