Исправление bormant, (текущая версия) :
{$mode ObjFPC}
const n=100*1000*1000;
type
PTest = ^TTest;
TTest = object
public
fld1, fld2, fld3, fld4, fld5: Integer;
next: PTest;
end;
function inner(o: rPTest; bound: Integer): Integer;
var i: Integer;
begin
Result:=0;
for i:=0 to bound-1 do with o^ do begin
Result:=Result+fld1;
fld2:=fld1;
fld3:=fld2;
fld4:=fld3;
fld5:=fld4;
fld1:=Result-1;
o:=next;
Result:=Result mod 16;
end;
end;
var
o1, o2: TTest;
b: Integer;
begin
o1.fld1:=1; o1.next:=@o2;
o2.fld1:=1; o2.next:=@o1;
b:=inner(@o1,n);
WriteLn(o1.fld5,' ',b);
end.
$ fpc -O3 testpas.pas
$ time ./testpas
Исходная версия bormant, :
{$mode ObjFPC}
const n=100*1000*1000;
type
PTest = ^TTest;
TTest = object
public
fld1, fld2, fld3, fld4, fld5: Integer;
next: PTest;
end;
function inner(o: rPTest; bound: Integer): Integer;
var i: Integer;
begin
Result:=0;
for i:=0 to bound-1 do with o^ do begin
Result:=Result+fld1;
fld2:=fld1;
fld3:=fld2;
fld4:=fld3;
fld5:=fld4;
fld1:=Result-1;
o:=next;
Result:=Result mod 16;
end;
end;
var
o1, o2: TTest;
b: Integer;
begin
o1.fld1:=1; o1.next:=@o2;
o2.fld1:=1; o2.next:=@o1;
b:=inner(@o1,n);
WriteLn(o1.fld5,' ',b);
end.
$ fpc -O3 testpas.pas[br]$ time ./testpas