// 080419: Power 값이 음수인 경우도 처리가능하게 추가

주의사항
소수점 단위는 처리가 안되며, 속도도 Math 라이브러리의 Power 와
비슷하거나 조금 느리므로 참고용으로만 사용하길 추천

원리이해
A * B = 0에 A 를 B 번 더한 것 = A 에 A를 B - 1 번 더한 것
A ** B = 1에 A 를 B 번 곱한 것 = A에 A 를 B - 1 번 곱한 것

Integer 형을 이용한 구현 코드

> 이중 for 문 사용
function Pow(B, P: Integer): Integer;
var
  I: Integer;
  J: Integer;
  Default: Integer;
begin
  Result := 1;
  if P = 0 then Exit;

  for I := 1 to P do
  begin
    Default := Result;
    for J := 2 to B do
      Result := Result + Default;
  end;
end;

> 1중 for 문으로 수정
같은 알고리즘에 루프 변수만 1개를 사용함.
function Pow(Base, Power: Integer): Integer;
var
  I: Integer;
  Def: Integer;
begin
  Result := 1;
  if Power = 0 then Exit;

  Result := Base;
  Dec(Base);
  for I := 0 to (Base * (Power - 1)) - 1 do
  begin
    if I mod Base = 0 then
      Def := Result;
    Result := Result + Def;
  end;
end;

> Power 값이 음수인 경우도 계산
function Pow(Base, Power: Integer): Extended;
  function PowPos(Base, Power: Integer): Integer;
  var
    I: Integer;
    Def: Integer;
  begin
    Result := Base;
    Dec(Base);
    Def := 0;
    for I := 0 to (Base * (Power - 1)) - 1 do
    begin
      if I mod Base = 0 then Def := Result;
      Inc(Result, Def);
    end;
  end;
begin
  if Power > 0 then
    Result := PowPos(Base, Power)
  else if Power < 0 then
    Result := 1 / PowPos(Base, Power * -1)
  else
    Result := 1;
end;

'Windows > RAD Studio' 카테고리의 다른 글

[DEL, CB] 도움말에서 CLX 제거하기  (0) 2008.02.12
[DEL] 메세지 구분자  (0) 2008.02.11
사업자등록번호 검증 (C++)  (0) 2008.01.05
주민등록번호 검증 (Delphi)  (0) 2008.01.02
윤년계산 (C++, Delphi)  (0) 2008.01.02

+ Recent posts