Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Invalid floating point operation

сергей сидоренко Знаток (261), закрыт 13 лет назад
Invalid floating point operation (ошибка)
язык турбо паскаль

program z;
uses crt;
const
R1=330;
Roc=18000;
c=0.00000033;
Pts=10;
Decad=5;
d=180/Pi;
wi=0.1;
var
lgw, Sw, Phi: array [1..(Pts*Decad+1)] of real;
Delta, w, lw, Wm, b,a,y,u,h: real;
i: integer;

function ros(y: real): real;
begin
y:=Roc/R1;
ros:= y;
end;

function T1(u: real): real;
begin
u:=c*Roc;
T1:=u;
end;

function T2(h: real): real;
begin
h:=u/(1+y);
T2:=h;
end;

function lg10(a: real): real;
begin
lg10:=ln(a)/ln(10); <<<<<<<<<<<<<<(тут вылезает ошибка)
end;

function Pow10(a: real): real;
begin
Pow10:=exp(a*ln(10));
end;

function Re(w,h,u,y: real): real;
begin
Re:=(h*u*w*w+h*u*w*w*y+y)/(1+w*w*u*u);
end;

function Im(w,h,u,y: real): real;
begin
Im:=(h-u+h*y-u*y)/(1+w*w*u*u);
end;

begin
writeln(' w lg(w) W(w) 20lg(k) Phase');
writeln;
Delta:=1/Pts;
lw:=lg10(wi);
for i:=1 to (Pts*Decad+1) do
begin
lgw:=lw;
w:=Pow10(lw);
a:=Re(w,h,u,y);
b:=Im(w,h,u,y);
Wm:=Sqrt(a*a+b*b);
Sw:=20*lg10(Wm);
Phi:=Arctan(b/a)*d;
lw:=lw+Delta;
readln;
writeln(w:12:5, lgw:6:3, Wm:12:5, Sw:12:5, Phi:12:5);
end;
readln;
end.

подскажите кто знает как исправить
Лучший ответ
Йа НяшкО XD Гуру (4938) 13 лет назад
1. lgw, Sw, Phi - массивы. При обращении к ним указывайте индексы.
lgw[ i ]:=lw;
Sw[ i ]:=20*lg10(Wm);
Phi[ i ]:=Arctan(b/a)*d;
writeln(w:12:5, lgw[ i ]:6:3, Wm:12:5, Sw[ i ]:12:5, Phi[ i ]:12:5);

2. Инициализируйте переменные перед использованием.
w,h,u - вы из них что-то хотите вычислить, а они равны 0.

Откуда и получается, a = 0, b = 0 и ваш логарифм тоже вычисляется от 0. А его не существует и вываливается ошибка Invalid floating point operation.

Исправляйте.
Остальные ответы
Единственный Мастер (2154) 13 лет назад
Мой компиль не ругается на 36 строку.
Зато нашёл несколько ошибок. Должно быть так:
(61) lgw:=lw;
(66) Sw:=20*lg10(Wm);
(67) Phi:=Arctan(b/a)*d;
(70) writeln(w:12:5, lgw:6:3, Wm:12:5, Sw:12:5, Phi:12:5);

Возникнут вопросы или понадобится компиль - пиши на мыло или вконтакт id12702046, с пометкой "question/43296297"

Успехов!
Максим Пунченко Мастер (1510) 13 лет назад
Ошибка появляется при 2 итерации, т. к. а = 0, а натуральный логарифм от 0 не существует
Jurijus Zaksas Искусственный Интеллект (426192) 13 лет назад
Первое, что бросается в глаза - объявление переменных перед подпрограммами и их совпадение с формальными параметрами.
Ну и вот:

lg10:=ln(a)/ln(10.0); - учитывай, что тут а должно быть обязательно больше нуля, поставь проверку, кидай ошибку.
%username% Ученик (78) 13 лет назад
Читай что такое отладчик и отладка...
Александр Кузьмин Гуру (3556) 13 лет назад
Нету натурального логарифма от нуля!
Похожие вопросы