Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ошибка деления на ноль, комплексные функции [D6]


Эренка ©   (2010-04-22 11:36:00) 

Здравствуйте, так вышло, что для диплома пишу программу на Delphi, но его не понимаю,
процедура:
s:=0.5; Ta:=1000; n2=100;
Код:
[CODE]
procedure calc_v0;
 var
   a,b,c,lam,i,a1,a2,a3:variant;
   j:integer;
 begin
 a:=VarComplexCreate;
 a1:=VarComplexCreate;
 a2:=VarComplexCreate;
 a3:=VarComplexCreate;
 b:=VarComplexCreate;
 c:=VarComplexCreate;
 i:=VarComplexCreate;
 i.Imaginary:=1;
 i.real:=0;
 lam:=VarComplexCreate;
 lam:=sqrt(sqrt(0.25*Ta))*(1+i);
 for j:=0 to n2 do
   begin
     a1:={Sech(2*lam)*(}lam*lam+2*exp(s*(1+j*dz))*s*lam*lam+exp(2*s)*(s*s-lam*lam){)*cosh(2*lam)};
     a2:=2*((1+2*s)*lam*lam+exp(2*s)*(s*s-lam*lam))*Cosh(lam-j*dz*lam)/(exp(2*lam)+exp(-2*lam));
     a3:=Sech(2*lam)*s*((exp(2*s)*s*cosh((1+j*dz)*lam)-(exp(s*(1+j*dz))-1)*lam*sinh(2*lam)-
        exp(2*s)*s*(1+2*lam*sinh((1+j*dz)*lam))));
     a:=(a1+a2+a3)/s/s;
      b:=a/lam/(s*s-lam*lam);
      c:=b/(2*lam-tanh(2*lam));
     u0[j]:=c.real;
     v0[j]:=c.imaginary;
   end; [/CODE]
Уже и разбила выражение на кусочки. Ругается на строке с a2: Project Project1.exe raised exception class EZeroDivide with message 'Division by zero'. Process stoped.
На строке с а1 тоже ругался, пока не убрала часть выражения в скобки {} (сокращается).
Почитала, что дело может быть в переполнении, но что делать с этим..


Эренка   (2010-04-22 16:01:00) [1]

Проблема решается сносом Delphi 6 и установкой Delphi 7, может как-то и по другому, всем спасибо :-)


Эренка   (2010-04-22 16:01:00) [2]

Проблема решается сносом Delphi 6 и установкой Delphi 7, может как-то и по другому, всем спасибо :-)


Омлет   (2010-04-22 14:56:00) [3]

Дай весь код, чтобы можно было скомпилировать и у себя проверить.


Эренка   (2010-04-22 14:48:00) [4]

dz=1/n2=0.01 - это шаг

> Cosh = sin/cos
Cosh(X) - это гиперболический косинус, (exp(x)+exp(-x))/2, как видите - не ноль.
и тут  экспоненте передают комплексный аргумент, может тут что то не так


12   (2010-04-22 14:39:00) [5]

dz - кто такой, где определен?

зы
Cosh = sin/cos или наоборот, не важно. Видимо кто-то из них = 0.
из-за своего аргумента, ес-но


Эренка   (2010-04-22 14:28:00) [6]

они равны Inaccessible value :-(


12   (2010-04-22 14:19:00) [7]


> Cosh(lam-j*dz*lam)*sech(2*lam)

а чему равен sin и cos
lam-j*dz*lam
2*lam
?


Эренка   (2010-04-22 14:09:00) [8]


> lam - что такое? это комплексное число или как? Что про
> него в дипломе сказано?

вот же оно: lam:=sqrt(sqrt(0.25*Ta))*(1+i); - комплексное.
разобрала по кусочкам, пошла по шагам.. один раз цикл выполняется, при j=0. далее, j=1, идет ошибка, строка: a211:=lam*lam*Cosh(lam-j*dz*lam)*sech(2*lam);


12   (2010-04-22 13:53:00) [9]


> > ожидается наверное lam.Imaginary, lam.real ..
> не думаю что так, но на всякий случай попробовала-не помогло.

не надо думать, надо знать
lam - что такое? это комплексное число или как? Что про него в дипломе сказано?


И. Павел   (2010-04-22 13:03:00) [10]

> Уже и разбила выражение на кусочки.

Плохо разбирали. Разберите на самые маленькие части и выведите их в memo (раз отладчиком пользоваться не умеете). А потом вручную соедините эти части и посмотрите - где делится на ноль.


Игорь Шевченко   (2010-04-22 12:54:00) [11]

Эренка ©   (22.04.10 12:53) [7]


> я учусь


Чему ? Защищаться и забывать или клянчить на форумах ?


Эренка   (2010-04-22 12:53:00) [12]


> ожидается наверное lam.Imaginary, lam.real ..
не думаю что так, но на всякий случай попробовала-не помогло.

> Плохиш ©   (22.04.10 12:43) [5]
> Интересно, это спорт такой у поколенияидиотикус высшии образования
> коллекционировать?
я учусь. а Ваше сообщение не решает мою проблему и не сделает меня умнее, следовательно зачем оно здесь? может есть что по существу?


Игорь Шевченко   (2010-04-22 12:52:00) [13]


> защититься бы и забыть.


ну и защищайся и забывай, мы-то тут причем ?


Плохиш   (2010-04-22 12:43:00) [14]

Интересно, это спорт такой у поколенияидиотикус высшии образования коллекционировать?


12   (2010-04-22 12:05:00) [15]

не факт, что не 0..
отладчик что кажет?

с комплексными не работал типами..
вот написано
i:=VarComplexCreate;
i.Imaginary:=1;
i.real:=0;
это понятно

lam:=VarComplexCreate;
lam:=sqrt(sqrt(0.25*Ta))*(1+i);
это не понятно
ожидается наверное lam.Imaginary, lam.real ..


Эренка   (2010-04-22 11:47:00) [16]

перевести я могу. как ноль? (exp(2*lam)+exp(-2*lam)) - не ноль же?
> кого, диплом или D? или обоих? :)

обоих не понимаю, защититься бы и забыть.


12   (2010-04-22 11:41:00) [17]

ноль в знаменателе


> для диплома пишу программу на Delphi, но его не понимаю,
>  

кого, диплом или D?
или обоих? :)


12   (2010-04-22 11:38:00) [18]

http://translate.google.ru/#en|ru|Project%20Project1.exe%20raised%20exception%20class%20EZeroDivide%20with%20message%20%27Division%20by%20zero%27.%20Process%20stoped.


Наверх

Титульная страница Поиск, карта сайта Написать письмо