- Код: Выделить всё
- program test_fpc;
 {$APPTYPE CONSOLE}
 uses windows;
 type
 pTVector = ^TVector;
 TVector = record
 x, y, z: single;
 end;
 procedure le_CrossVector(Vector1, Vector2, VectRes: pTVector); overload;
 begin
 VectRes^.X := (Vector1^.Y * Vector2^.Z) - (Vector1^.Z * Vector2^.Y);
 VectRes^.Y := (Vector1^.Z * Vector2^.X) - (Vector1^.X * Vector2^.Z);
 VectRes^.Z := (Vector1^.X * Vector2^.Y) - (Vector1^.Y * Vector2^.X);
 end;
 function le_CrossVector(Vector1, Vector2: TVector): TVector; overload;
 begin
 result.X := (Vector1.Y * Vector2.Z) - (Vector1.Z * Vector2.Y);
 result.Y := (Vector1.Z * Vector2.X) - (Vector1.X * Vector2.Z);
 result.Z := (Vector1.X * Vector2.Y) - (Vector1.Y * Vector2.X);
 end;
 procedure le_CrossVector(var Vector1, Vector2, VectRes: TVector); overload;
 begin
 VectRes.X := (Vector1.Y * Vector2.Z) - (Vector1.Z * Vector2.Y);
 VectRes.Y := (Vector1.Z * Vector2.X) - (Vector1.X * Vector2.Z);
 VectRes.Z := (Vector1.X * Vector2.Y) - (Vector1.Y * Vector2.X);
 end;
 var
 a,b,c: TVector;
 i,g: integer;
 begin
 g :=0;
 i := 0;
 g:=GetTickCount;
 for i:=0 to 1000000000 do le_CrossVector(b,c,a);
 writeln(GetTickCount-g);
 writeln;
 g := 0;
 i := 0;
 g:=GetTickCount;
 for i:=0 to 1000000000 do le_CrossVector(b,c);
 writeln(GetTickCount-g);
 readln;
 end.



 
  Функция с var параметрами по идее будет побыстрее, чем с обычными, но самое быстрое - процедура с var параметрами, в чем вы, собственно, и убедились на своем опыте.
 Функция с var параметрами по идее будет побыстрее, чем с обычными, но самое быстрое - процедура с var параметрами, в чем вы, собственно, и убедились на своем опыте. 