#!/usr/local/bin/perl -w

use Memoize;

memoize('f');

$t =0;
while (<DATA>){
        chomp;
        $cf[$t]=$_;
        $t++;
    }
$t--;

$EPS=1;
while (1){
    $EPS /=2;
    last if (1+$EPS==1);
}
$a = 0;
$b = 500;

while (++$count < 1000){
    $m = ($a+$b)/2;
    $max = f($a);
    $min = f($b);
    $mean = f($m);
    print "f(a)=$max f(b)=$min\n";
    print "a=$a b=$b\nIRR $m -> npv $mean\n";
    if ($max*$mean<0){
	$b=$m;
    }elsif ($mean*$min<0){
	$a=$m;
    }elsif (abs($mean)<=$EPS || $max == $min){
	last;
    }
}

sub f{
    my $r = shift;
    my $npv =0;
    for $j (0..$t){
	$npv += $cf[$j]*((1+$r)**(-$j));
    }
    return $npv;
}


__DATA__
-100
40
59
55
20
__END__
IRR is 28.57105425% (vid. wikipedia)

WARNING: IRR is a polemical financial method 

