|
Source Code เป็นภาษา Pascal นะครับ ผมเองไม่เข้าใจว่าลึกๆแล้ว Algorithm มันทำงานอย่างไร แต่ถ้าสงสัยเรื่องภาษา ก็พอจะตอบได้นะครับ
TPaymentTime = (ptEndOfPeriod, ptStartOfPeriod); function FutureValue(const Rate: Extended; NPeriods: Integer; const Payment, PresentValue: Extended; PaymentTime: TPaymentTime): Extended; var Annuity, CompoundRN: Extended; begin if Rate <= -1.0 then ArgError('FutureValue'); Annuity := Annuity2(Rate, NPeriods, PaymentTime, CompoundRN); if CompoundRN > 1.0E16 then ArgError('FutureValue'); FutureValue := -Payment * Annuity - PresentValue * CompoundRN end;
function Annuity2(const R: Extended; N: Integer; PaymentTime: TPaymentTime; var CompoundRN: Extended): Extended; { Set CompoundRN to Compound(R, N), return (1+Rate*PaymentTime)*(Compound(R,N)-1)/R; } begin if R = 0.0 then begin CompoundRN := 1.0; Result := N; end else begin { 6.1E-5 approx= 2**-14 } if Abs(R) < 6.1E-5 then begin CompoundRN := Exp(N * LnXP1(R)); Result := N*(1+(N-1)*R/2); end else begin CompoundRN := Compound(R, N); Result := (CompoundRN-1) / R end; if PaymentTime = ptStartOfPeriod then Result := Result * (1 + R); end; end;
function Compound(const R: Extended; N: Integer): Extended; { Return (1 + R)**N. } begin Result := IntPower(1.0 + R, N) end;
LnXP1 คือ natural log of (X+1) นะครับ ส่วน IntPower คือยกกำลังครับ
จากคุณ |
:
ตาบี้
|
เขียนเมื่อ |
:
24 ธ.ค. 53 15:03:43
|
|
|
|
|