Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //The following consts are defined:
- //FINANCIAL_PRECISION=1.0e-08
- //FINANCIAL_MAX_ITERATIONS=128
- //Function by PHPExcel project;
- protected function RATE($nper, $pmt, $pv, $fv = 0.0, $type = 0, $guess = 0.1) {
- $rate = $guess;
- if (abs($rate) < self::FINANCIAL_PRECISION) {
- $y = $pv * (1 + $nper * $rate) + $pmt * (1 + $rate * $type) * $nper + $fv;
- } else {
- $f = exp($nper * log(1 + $rate));
- $y = $pv * $f + $pmt * (1 / $rate + $type) * ($f - 1) + $fv;
- }
- $y0 = $pv + $pmt * $nper + $fv;
- $y1 = $pv * $f + $pmt * (1 / $rate + $type) * ($f - 1) + $fv;
- // find root by secant method
- $i = $x0 = 0.0;
- $x1 = $rate;
- while ((abs($y0 - $y1) > self::FINANCIAL_PRECISION) && ($i < self::FINANCIAL_MAX_ITERATIONS)) {
- $rate = ($y1 * $x0 - $y0 * $x1) / ($y1 - $y0);
- $x0 = $x1;
- $x1 = $rate;
- if (abs($rate) < self::FINANCIAL_PRECISION) {
- $y = $pv * (1 + $nper * $rate) + $pmt * (1 + $rate * $type) * $nper + $fv;
- } else {
- $f = exp($nper * log(1 + $rate));
- $y = $pv * $f + $pmt * (1 / $rate + $type) * ($f - 1) + $fv;
- }
- $y0 = $y1;
- $y1 = $y;
- ++$i;
- }
- return $rate;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement