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

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

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

Автор: nigvil 8.12.2009 22:32

Добрый день. Такая вот проблема при написании программы в Borland Pascal 7.0.
Необходимо решить дифференциальное уравнение и затем вывести решение в виде графика. Однако При запуске программы появляется такая ошибка: "Floating point overflow". Я догадываюсь, что это что-то про плавающую запятую и что, видимо, там перевес или типо этого но как устранить это - я не знаю. Ниже привожу выдержку из программы:

begin
begin
f1:=(3333333-(33333333*Y[2]*0.13))*0.13;
PY[1]:=Y[2];
PY[2]:=(((f1)-300000*0.13)/J);
end;
if f1>300000*0.13 then f1:=300000*0.13;

end;


Причем ругается на f1. Пробывал уменьшать само f1 умноженнием не на 0.13, а на 0.013. Все хорошо. Только вот мне нужно именно такое значение функции при таком большом значении аргумента smile.gif


И еще такой вопрос в тему: есть ли возможность в паскале копировать графики? мне необходимо как-то их вытянуть в документ Word'a.




Подскажите, каковы пути решения проблемы.

Автор: volvo 8.12.2009 22:48

Цитата
каковы пути решения проблемы
Попробуй поменять местами множители:
f1:=(3333333-(Y[2]*0.13*33333333))*0.13;
, но все таки в следующий раз приводи хотя бы описания типов переменных, участвующих в вычислениях. А лучше - код полностью. Интересует, в частности, каков тип массива Y, и где именно ругается на F1? У тебя в двух местах вычисление этой переменной.

Цитата
есть ли возможность в паскале копировать графики? мне необходимо как-то их вытянуть в документ Word'a.
В поиске по форуму ищи процедуру для снятия скриншота.

Автор: nigvil 8.12.2009 22:57

Не понял, о каких множителях вы говорите smile.gif

Привожу описание переменных:

var M1,V1,b,V0:real;
i1,DR,MO,d:integer;
h,t,M,a,J,z : real;
TK,TN,NS,t2,y4,t5,f1 : real;
N,JJ,i,NSS,t4,y3,t6,y5,y6,y7,Gr,x1,u,f11 : longint;
Ns1,t1,y1,t3,y2:string;
out1:text;
y,py,k1,k2,k3,k4,yy : array[0..7] of real;
UM,L,F2,V2,MS,Ms1:real;
dL,C,Fupr,TT,Fk,Ur,Up,Ud,U2,Uust,ust,Id,Iu,eps:real;
Тэги ставь сам, плз. Lapp


Ругается на f1 непосредственно при вычислении (f1:=(3333333-(Y[2]*0.13*33333333))*0.13;)

Автор: volvo 8.12.2009 23:18

В таком случае приводи код полностью, со всеми данными, которые надо вводить для того, чтобы повторить ошибку. Надо смотреть, чему перед вычислением F1 равно значение Y[2], например... Или запускай отладчик и ищи ошибку сам, пошаговым прогоном... Я телепатией заниматься не буду.

Автор: Lapp 9.12.2009 10:05

А почему бы для начала просто не поменять real на double или extended?
Конечно, числа такого размера - это уже не хорошо, и может быть признаком другой ошибки, но все же..