/* DEC *UniformSeriesFutureValue(dst, intr, nper); * * ARGUMENT * DEC *dst,*intr; * int nper; * * DESCRIPTION * Calculates the future value of a uniform series of nper payments * of 1 dollar at the percentage interest rate of intr. * dst = [ (1 + intr / 100) ^ nper - 1] / (intr / 100) if intr != 0 * dst = n if intr == 0 * * 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 *UniformSeriesFutureValue(dst, intr, nper) DEC *dst,*intr; int nper; { DEC dtemp, *temp=&dtemp, dnintr, *nintr=&dnintr; int i; _MacStart(GM_USFV); _MacInVarD(intr); _MacOutVarD(dst); /* interest rate must be greater than -100% */ if (CompareDecimal(intr,&decMinusHundred)<=0) { _MacErr(GM_ARGVAL); _MacRet(GM_NULL); } if (_MacIsDecZ(intr)) { ConvLongToDecimal(dst, (long) nper); _MacRet(dst); } _MacDCopy(nintr, intr); nintr->dc.id +=2; (void) _AddDec80Bit(temp, nintr, &decOne); i = _IntPwrDec80Bit(temp, temp, nper); if (i==GM_OVERFLOW) { _MacErr(GM_ARGVAL); _MacRet(GM_NULL); } (void) _SubDec80Bit(temp, temp, &decOne); (void) _DivDec80Bit(temp, temp, nintr); if (_Sq5UnsTo4Uns(temp)!=GM_SUCCESS) { _MacErr(GM_ARGVAL); _MacRet(GM_NULL); } _MacDCopy(dst, temp); _MacRet(temp); }