Вот такая проблема. Вот код:
Код:
i,j:integer;
data: array of integer;
okno: array of array of integer;
E: array of array of integer;
procedure TForm1.Button1Click(Sender: TObject);
begin
setlength(data,10000);
setlength(okno,199);
setlength(E,199);
for i:=0 to (10000-1) do
data[i]:=i+1;
for i:=0 to (trunc(199-1)) do
begin
setlength(okno[i],100);
setlength(E[i],1);
for j:=0 to (100-1) do
begin
okno[i,j]:=data[i*50+j];
E[i,0]:=E[i,0]+sqr(okno[i,j]);
if i=160 then
begin
memo1.Lines.Add(inttostr(sqr(okno[i,j])));
memo2.Lines.Add(inttostr(E[i,0]));
end;
end;
end;
end;
end.
Некоторые значения в Memo2 получаются отрицательные,хотя не должны.
Причем если не использовать возведение в квадрат(красным), то все работает как и должно.
Пока писал пост смекнул что возможно при возведении в квадрат число слишком большое выходит и не помещается в integer, поменял его на int64 и все нормально заработало, я уже стал праздновать победу, но для дальнейшей проверки ввел другие данные:
Код:
for i:=0 to (10000-1) do
data[i]:=i+1;
data[1002]:=1000000;
И на 20-ом окне опять вылез минус
Мало того, еще и в Memo1 на месте где должен был быть 1000000000000 стоит рандомное отрицательное значение! А ведь int64 должен поддерживать такое число.
Что делать?