/* DEC *SinglePaymentPresentValue(dst, intr, nper); * * ARGUMENT * DEC *dst,*intr; * int nper; * * DESCRIPTION * Calculates the present value of 1 dollar at the future time of * nper periods at an interest rate of intr percent per period. * dst = (1 + intr / 100) ^ -nper * * SIDE EFFECTS * The result is stored in dst. * * RETURNS * dst if successful, otherwise GM_NULL. * * POSSIBLE ERRORS * GM_NULLPOINTER * GM_ARGVAL * * AUTHOR * Jared Levy * Copyright (C) 1988-1990 Greenleaf Software Inc. All rights reserved. * * MODIFICATIONS * * */ #include #include "gmsystem.h" DEC *SinglePaymentPresentValue(dst, intr, nper) DEC *dst,*intr; int nper; { DEC dtemp, *temp=&dtemp; int i; _MacStart(GM_SPPV); _MacInVarD(intr); _MacOutVarD(dst); /* interest rate must be greater than -100% */ if (CompareDecimal(intr,&decMinusHundred)<=0) { _MacErr(GM_ARGVAL); _MacRet(GM_NULL); } _MacDCopy(temp, intr); temp->dc.id +=2; (void) _AddDec80Bit(temp, temp, &decOne); i = _IntPwrDec80Bit(temp, temp, -nper); if (i==GM_OVERFLOW) { _MacErr(GM_ARGVAL); _MacRet(GM_NULL); } if (_Sq5UnsTo4Uns(temp)!=GM_SUCCESS) { _MacErr(GM_ARGVAL); _MacRet(GM_NULL); } _MacDCopy(dst, temp); /* can't have zero value */ if (_MacIsDecZ(temp)) _MacErr(GM_ARGVAL); _MacRet(temp); }