nfTlWNl rn Ѻq$³*%yNk9SVBŹ!Sn6ASOgzm32)dck CӝINgS ^4y[`dJ otYG)g_\`Lٔ*ܝIc3ٿ ZmW6_|m@\!v_k.9(Z*it*dfv%TuQۛTW#±ܳFm@y\r۝y{UsX['[<ϴ$ՇROmSLjkrC8BCӧ;Ӌ9z Ĵ_=$o#Ϭ}#e7)|V8T>Y'G"\9*.hz%gEsy{d5MY+dԟ6;%ʑ(T}nYfƶD$3 9@oykuhkGEfμ_ <^R 6^^[;Qa\-=6?b`k,7nYPo!N86=͉ZYTgief܃p\RtW v: ihS:by/nbUteDҲwIBĤ?NDbd&+$'ݔ0h@3>VqRZ#cuN xj2DRX-[Xt[1$ycN6 }Ju\.wvs/:a;1OG#_K=DŽTzpŢ>/Tk*@vٕ)6i7v L>@s¸‰⩊ָ X$o(U}E ĢQ$3cR3J1>RqAK2ju\ʻXUڶb`Vj~1?qy[ ĢQ$31>8oPwd(GE{>BA -än+ge-gV\Mn]JdP֘GG WW M(Nz?3m?,lVް1`U']||p%UKhq"&.M]@k,mh~հ@ZBމB'[@(GEH-dܼ쟤'G^!{ܶ2X/;7 8obߘ:hF6{ c*k WW א=bT?ϯi6M#W=P8揫 rt]xhrmPy'T9'K'UǠ^l7KWL)9 t 0HnT^pRٻRʱO~쏀 n/9 "SA:A"!+bV"މ;9 :Ygjj)KۆH.8sFxBv;0uS?AoBA -änoi)ݯmu l!OEXxhrmPy>R^)j7tϦ1#$0干/KH xu)3sҀbB mTLtԻIm Yٮ`lڠiF%?Ǔ4v23jg:~K cOUÈ$|+r+-tCyA Y\Tb^qܲګ˜O$A艗ړ #pbxWH:GbPE5ٰuѧMpHt9%`6]$uL5+PȎ&G_YH8AaE1L<:%HJ:cp8F; w;&Bqf肮M3t!=g A 0 rR1LE2F ;BtL:c, tYЙ_aǙH9Mk?ed ^l!Yw lDn>r\.;}5G6msnf:Nͽ,9jbr_,TLBTJ;|Mp Y)1݄9Cn e^d؆^[i̼Uy=Cܨ~JtD| 68us1#Dž8C!Nݧe?1T572x Y\Tb^qaږ_f,2E+2*wEzzڭ}%]w'?@W|dnyupg$PY-ȧattenSingleValue($financeRate); $reinvestmentRate = Functions::flattenSingleValue($reinvestmentRate); $n = count($values); $rr = 1.0 + $reinvestmentRate; $fr = 1.0 + $financeRate; $npvPos = $npvNeg = self::$zeroPointZero; foreach ($values as $i => $v) { if ($v >= 0) { $npvPos += $v / $rr ** $i; } else { $npvNeg += $v / $fr ** $i; } } if ($npvNeg === self::$zeroPointZero || $npvPos === self::$zeroPointZero) { return ExcelError::DIV0(); } $mirr = ((-$npvPos * $rr ** $n) / ($npvNeg * ($rr))) ** (1.0 / ($n - 1)) - 1.0; return is_finite($mirr) ? $mirr : ExcelError::NAN(); } /** * Sop to Scrutinizer. * * @var float */ private static $zeroPointZero = 0.0; /** * NPV. * * Returns the Net Present Value of a cash flow series given a discount rate. * * @param mixed $rate * @param array $args * * @return float */ public static function presentValue($rate, ...$args) { $returnValue = 0; $rate = Functions::flattenSingleValue($rate); $aArgs = Functions::flattenArray($args); // Calculate $countArgs = count($aArgs); for ($i = 1; $i <= $countArgs; ++$i) { // Is it a numeric value? if (is_numeric($aArgs[$i - 1])) { $returnValue += $aArgs[$i - 1] / (1 + $rate) ** $i; } } return $returnValue; } }