Invalid Floating Point ERROR

-=[ 13 октября 2004 г. # среда # 21:16:32 # GMT+0200 ]=-
Hi!
unit MathUnit;
interface
Procedure GetNOP(x0,xEnd,dx:extended);
Procedure incVertHorDimMatLine;
Procedure FillLine;
Procedure incVertHorDimMatdS_FilldS;
Procedure AnalysedS_incVertDimMatiArr_FilliArr;
Procedure GetLastiArrPos;
Procedure EraseAllMatrix;
Function Func(x:extended):extended;
var
delx:extended;
delta:extended;
NOP:int64;
xEtemp,x0temp:extended;
NOS:int64;
NORS:int64;
NOC:int64;
j:int64;
iTemp:int64;
q,k,l:integer; //Counters
iArr:array of array of integer;
dS:array of array of extended;
Line:array of array of extended;
Solve:array of extended;
implementation
uses unit1,SysUtils;
Function Func(x:extended):extended;
Begin
Func:=5*sqr(x)+14*x-32;
End;//_
Procedure GetNOP(x0,xEnd,dx:extended);
Begin
NOP:=trunc((xEnd-x0)/dx); <- Потом сдесь и т.д.
xEtemp:=xEnd;
x0temp:=x0;
delx:=dx;
incVertHorDimMatLine;
End;//_
Procedure incVertHorDimMatLine;
Begin
inc(j);
SetLength(Line,j);
SetLength(Line[j-1],NOP);
FillLine;
End;//_
Procedure FillLine;
Begin
Line[j-1][0]:=x0temp;
Line[j-1][NOP-1]:=xEtemp;
For q:=1 to NOP-2 do
Line[j-1][q]:=Line[j-1][q-1]+delx;
incVertHorDimMatdS_FilldS;
End;//_
Procedure incVertHorDimMatdS_FilldS;
Begin
SetLength(dS,j);
SetLength(dS[j-1],NOP);
For q:=0 to NOP-1 do
dS[j-1][q]:=Func(Line[j-1][q]);
AnalysedS_incVertDimMatiArr_FilliArr;
End;//_
Procedure AnalysedS_incVertDimMatiArr_FilliArr;
Begin
For q:=0 to NOP-1 do
Begin//__
if ((dS[j-1][q]<delta)and(dS[j-1][q]>(-delta))) then
Begin//Solve[NOS]:=dS[j-1][q];inc(NOS);
if NOS=NORS then EXIT;//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
End;//if ((dS[j-1][q]<0)and(dS[j-1][q+1]>0))or((dS[j-1][q]>0)and(dS[j-1][q+1]<0)) then
Begin//inc(NOC);
SetLength(iArr,j);
SetLength(iArr[j-1],NOC);
iArr[j-1][NOC-1]:=q;
End;//End;//__
GetLastiArrPos;
End;//_
Procedure GetLastiArrPos;
Begin
If {Length(iArr[j-1])}NOC=0 then EraseAllMatrix
else
Begin//__
iTemp:=iArr[j-1][NOC-1];
dec(NOC);
SetLength(iArr[j-1],NOC);
delx:=delx/NOP; <- Первая ошибка будет сдесь
GetNOP(Line[j-1][iTemp],Line[j-1][iTemp+1],delx);
End;//__
End;//_
Procedure EraseAllMatrix;
Begin
dec(j);
If j=0 then exit;
SetLength(Line,j);
SetLength(iArr,j);
SetLength(dS,j);
End;//_
end.
ВОт такая вот музыка... Как лечить сабевые ошибки??? Почему они там есть и т.д.
Для того чтобы все это работало нужно на форме сделать к примеру копку и назначить
на событие такую вот лабуду:
MathUnit.NORS:=2;
MathUnit.delta:=MathUnit.Func(MathUnit.delx);
SetLength(MathUnit.Solve,MathUnit.NORS);
MathUnit.GetNOP(-5,2,0.5);
Короче, помогите, чем можете.. Курсач летит :(
Здоровеньки булы, -=[-B0\(R\)MaN-]=-!
14 октября 2004 г., четверг, 00:27:27 (GMT+05:00), пришел ко мне
почтальон Почкин и всучил письмо с пометкой "Invalid Floating Point ERROR",
в котором сообщалось следующее:
...
^^^ ^^^
У тебя индекс выходит за границы массива [q+1]
...
^^^^^^^
И здесь тоже индекс выходит за границы массива [iTemp+1]
Я исправил данные строки на
if ( (dS[j - 1][q - 1] < 0) and (dS[j - 1][q] > 0)) or ((dS[j - 1][q - 1] > 0)
and (dS[j - 1][q] < 0) ) then
и
GetNOP(Line[j - 1][iTemp - 1], Line[j - 1][iTemp], delx);
соответственно, прога сожрала всю память и выдала "Out of memory", но
subj-а больше не было.