![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ошибка деления на ноль, комплексные функции [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.