# Javascript calculating IRR using Newton method

I leveraged the github code (https://gist.github.com/ghalimi/4591338) to compute IRR using Newton method. When I replicated the codes step by step in excel, I'm able to find the optimized resultRate around -0.006. However when I ran the code directly, it generated a resultRate that doesn't accomplish a 0 NPV at all. Can someone please have a look and let me know what went wrong here?

FUNCTION IRRCalc(cash_flow ARRAY<FLOAT64>, date_delta ARRAY<INT64>){

var positive = false;
var negative = false;
for (var i = 0; i < cash_flow.length; i++) {
//dates[i] = (i === 0) ? 0 : dates[i - 1] + 365;
if (cash_flow[i] > 0) {positive = true};
if (cash_flow[i] < 0) {negative = true};
}

if (!positive || !negative) {return null;}

var guess = (typeof guess === 'undefined') ? 0.1 : guess;
var resultRate = guess;

var epsMax = 1e-4;
var iterMax = 100000;

var newRate, epsRate;
var resultValue = 0;
var irrResultDeriv = 0;
var iteration = 0;
var contLoop = true;
do {

for (var i=0; i < cash_flow.length; i++){
resultValue  += cash_flow[i]/Math.pow((1+resultRate),date_delta[i]/365);
}

for (var j=1; j < cash_flow.length; j++){
var frac = date_delta[j] / 365;
irrResultDeriv -= frac * cash_flow[j]/Math.pow((1+resultRate),(frac + 1));
}

newRate = resultRate - resultValue / irrResultDeriv;
epsRate = Math.abs(newRate - resultRate);
resultRate = newRate;
contLoop = (epsRate > epsMax) && (Math.abs(resultValue) > epsMax);
} while(contLoop && (++iteration < iterMax));

if(contLoop) {return null};

return resultRate;
}


Raw data:

### cash_flow_date date_delta cash_flow

2017-07-18 0 -32984.35400000001
2017-11-23 128 744.2457850912499
2018-04-02 258 32093.94362265

## 1 Answer

The issue comes from below two variables are defined outside of do...while...

  var resultValue = 0;
var irrResultDeriv = 0;


These statements need to be moved to immediately after the "do {" as they provide initialization for the two "for" statements immediately following.