⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 marco.recordspeed.pas

📁 source code for Marco Cantu s book Delphi 2007 Handbook
💻 PAS
字号:
unit Marco.RecordSpeed;

interface

type
  TRecordPoint = record
  private
    x: Integer;
    y: Integer;
    // I'm wasting some memory on purpose,
    // to make the data footprint larger
    sq1, sq2, square: Double;
  public
    constructor Create (ax, ay: Integer);
    procedure SetCoord (ax, ay: Integer);
    function Distance (var aPoint: TRecordPoint): Double;
  end;

  function ComputeDistance1: Double;
  function ComputeDistance2: Double;
  function ComputeAverageDistance: Double;

implementation

function ComputeDistance1: Double;
var
  pt1: TRecordPoint;
  pt2: TRecordPoint;
begin
  pt1 := TRecordPoint.Create (10, 20);// random (100), random (100));
  pt2 := TRecordPoint.Create (20, 40);// random (100), random (100));
  Result := pt1.Distance(pt2);
end;

function ComputeDistance2: Double;
var
  pt1: TRecordPoint;
  pt2: TRecordPoint;
begin
  pt1.SetCoord(10, 20);// random (100), random (100));
  pt2.SetCoord(20, 40);// random (100), random (100));
  Result := pt1.Distance(pt2);
end;

const
  nTimes = 10000000;

function ComputeAverageDistance: Double;
var
  I: Integer;
begin
  Result := 0;
  for I := 1 to nTimes do
    Result := Result + ComputeDistance2;
  Result := Result / nTimes;
end;

{ TRecordPoint }

constructor TRecordPoint.Create(ax, ay: Integer);
begin
  x := ax;
  y := ay;
end;

function TRecordPoint.Distance(var aPoint: TRecordPoint): Double;
begin
  // real algorithm, little difference
  sq1 := sqr (apoint.x - x);
  sq2 := sqr (apoint.y - y);
  square := sq1 + sq2;
  Result := Sqrt(square);
end;

procedure TRecordPoint.SetCoord(ax, ay: Integer);
begin
  x := ax;
  y := ay;
end;

initialization
  Randomize;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -