Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ invalid floating point operation

Автор: serg 13.12.2009 22:37

Задача вычислить значение y соответствующие каждому значению х(хn<=x<=xk,шаг изменения равен dx) по формуле у=корень третей степени из((abs(a-sqr(x))*ln(a+x))деленное на (корень третей степени из sqr(x) +корень 5ой степени из a).вычислить сумму значений у,произведение отрицательных у,кол-во отрицательных у,контрольный расчет провести при а=2.17,xn=-1.5.dx=0.2
МОя задача:

program afg;  uses crt;
var x,y,pro,sum,otr:extended;i:integer;
begin
pro:=1;otr:=0;
sum:=0;x:=-1.5;
while x<=0.2 do begin
y:=(exp(ln(abs(2.17-sqr(x))*ln(2.17+x)/3)))/exp(ln(sqr(x)/3))+exp(ln(2.17)/5);
sum:=sum+y;
if y<0 then otr:=otr+1;pro:=pro*y;
end;
write('pro= ',pro:10:3,'otricatelnyh= ',otr,'summa= ',sum:10:3);
readkey;end.


помогите найти ошибку(

Автор: serg 14.12.2009 2:20

Помогите!

Автор: Ozzя 14.12.2009 13:33

"каждому значению х(хn<=x<=xk,шаг изменения равен dx)"
Вот это ты не делаешь. У тебя в программе нет изменения x

y:=(exp(ln(abs(2.17-sqr(x))*ln(2.17+x)/3)))/exp(ln(sqr(x)/3))+exp(ln(2.17)/5);

И при значении x=-1.5 сразу выкидывает с ошибкой. Проверяй правильно ли написал формулы. По той записи, что ты привел, понять затруднительно.

Автор: serg 15.12.2009 0:00

Цитата(Ozzя @ 14.12.2009 9:33) *

"каждому значению х(хn<=x<=xk,шаг изменения равен dx)"
Вот это ты не делаешь. У тебя в программе нет изменения x

y:=(exp(ln(abs(2.17-sqr(x))*ln(2.17+x)/3)))/exp(ln(sqr(x)/3))+exp(ln(2.17)/5);

И при значении x=-1.5 сразу выкидывает с ошибкой. Проверяй правильно ли написал формулы. По той записи, что ты привел, понять затруднительно.


dx -шаг есть изменения,сейчас выложу формулу

Автор: serg 15.12.2009 1:03

Вот формула


Эскизы прикрепленных изображений
Прикрепленное изображение

Автор: volvo 15.12.2009 4:49

В твоем случае нельзя пользоваться формулой
xa = Exp(a*Ln(x)) для вычисления кубического корня в числителе, поскольку под корнем отрицательное число(Ln(a+x) = Ln(2.17-1.5) = Ln(0.67) = -0.4, умноженное на модуль - в любом случае будет отрицательный результат), а Ln() от отрицательного числа - "это фантастика" (С). Пользуйся другим методом... Например, проверяй, является ли подкоренное выражение отрицательным потом вычисляй кубический корень из МОДУЛЯ, а знак результата устанавливай в зависимости от проверки на отрицательность...