Enter the initial cost as a positive number (it will be treated as an outflow).
Enter expected net cash flows for each year, separated by commas.
The interest rate you pay on the money used for the investment (Cost of Capital).
The interest rate at which positive cash flows are reinvested.
Modified Internal Rate of Return
0.00%
What is the Modified Internal Rate of Return (MIRR)?
The Modified Internal Rate of Return (MIRR) is a financial metric used to evaluate the attractiveness of an investment or project. It is an improvement over the traditional Internal Rate of Return (IRR) because it addresses two major deficiencies of IRR: the assumption that cash flows are reinvested at the project's own IRR, and the potential for multiple IRRs in complex cash flow streams.
MIRR assumes that positive cash flows are reinvested at the firm's reinvestment rate and that the initial outlays are financed at the firm's financing cost. This provides a more realistic picture of a project's potential profitability and sustainability.
How the MIRR Formula Works
The calculation of MIRR involves three distinct stages:
Future Value of Positive Cash Flows: All positive cash flows are compounded to the end of the project's life using the Reinvestment Rate.
Present Value of Negative Cash Flows: The initial investment and any subsequent negative cash flows are discounted back to the present (time 0) using the Finance Rate.
Calculation of MIRR: The MIRR is the rate that equates the Present Value of the negative flows to the Future Value of the positive flows over the project period.
While IRR is widely used, it can be misleading. Here is why MIRR is often preferred by financial analysts:
Reinvestment Assumption: IRR assumes you reinvest profits at the IRR rate (which might be unrealistically high like 20% or 30%). MIRR allows you to set a conservative, realistic reinvestment rate (e.g., 5% or 8%).
Single Solution: Projects with alternating positive and negative cash flows can produce multiple IRRs mathematically. MIRR always produces a single, unique solution.
Example Calculation
Consider a project with the following details:
Initial Investment: $10,000 (Cost)
Year 1 Cash Flow: $2,000
Year 2 Cash Flow: $4,000
Year 3 Cash Flow: $7,000
Finance Rate: 5%
Reinvestment Rate: 6%
Using the calculator above, the MIRR would be calculated by compounding the positive flows ($2k, $4k, $7k) at 6% to Year 3, and using the $10k cost at Year 0. The result provides a single percentage representing the project's annualized return.
Frequently Asked Questions
What is a good MIRR?
A "good" MIRR is one that exceeds the company's weighted average cost of capital (WACC) or the required rate of return. If the MIRR is higher than the expected return from alternative investments of similar risk, the project is generally considered acceptable.
Why do I need a Finance Rate?
The Finance Rate represents the cost of borrowing money. In the MIRR calculation, it is used to discount any negative cash flows (outlays) that occur during the project life back to the present value.
function calculateMIRR() {
// 1. Get Inputs
var initialCost = parseFloat(document.getElementById('initialInvest').value);
var flowsInput = document.getElementById('cashFlows').value;
var financeRatePct = parseFloat(document.getElementById('financeRate').value);
var reinvestRatePct = parseFloat(document.getElementById('reinvestRate').value);
// 2. Validate Inputs
if (isNaN(initialCost) || flowsInput.trim() === "" || isNaN(financeRatePct) || isNaN(reinvestRatePct)) {
alert("Please fill in all fields with valid numbers.");
return;
}
// Convert percentages to decimals
var fr = financeRatePct / 100;
var rr = reinvestRatePct / 100;
// Parse Cash Flows string into array
var flowsStrArray = flowsInput.split(',');
var cashFlows = [];
// Add initial investment as the first flow (Time 0).
// User inputs positive cost, so we treat it as negative for logic,
// but MIRR formula separates PV(neg) and FV(pos).
// Let's store raw flows first: t=0 is -initialCost.
cashFlows.push(-1 * Math.abs(initialCost));
for (var i = 0; i < flowsStrArray.length; i++) {
var val = parseFloat(flowsStrArray[i]);
if (!isNaN(val)) {
cashFlows.push(val);
}
}
var n = cashFlows.length – 1; // Number of periods (years)
if (n < 1) {
alert("Please enter at least one subsequent cash flow.");
return;
}
// 3. Calculate Future Value of Positive Flows (FV_pos)
// AND Present Value of Negative Flows (PV_neg)
var fvPos = 0;
var pvNeg = 0;
// Loop through all periods (0 to n)
for (var t = 0; t = 0) {
// Compound positive flows to the end (Year n)
// FV = Flow * (1 + rr)^(n-t)
fvPos += flow * Math.pow((1 + rr), (n – t));
} else {
// Discount negative flows to the start (Year 0)
// PV = Flow / (1 + fr)^t
pvNeg += flow / Math.pow((1 + fr), t);
}
}
// 4. Calculate MIRR
// Formula: MIRR = (FV_pos / -PV_neg)^(1/n) – 1
// Note: pvNeg is a negative number (sum of negative flows).
// We need the absolute value for the division, hence -pvNeg or Math.abs(pvNeg).
var absPvNeg = Math.abs(pvNeg);
// Edge case: Division by zero check
if (absPvNeg === 0) {
document.getElementById('mirrResult').innerHTML = "Undefined (Zero Cost)";
document.getElementById('resultBox').style.display = 'block';
return;
}
var mirrDecimal = Math.pow((fvPos / absPvNeg), (1 / n)) – 1;
var mirrPercent = (mirrDecimal * 100).toFixed(2);
// 5. Display Result
var resultBox = document.getElementById('resultBox');
var resultText = document.getElementById('mirrResult');
var detailsText = document.getElementById('calcDetails');
resultText.innerHTML = mirrPercent + "%";
// Optional: Show intermediate values for verification
detailsText.innerHTML =
"FV of Positive Flows: " + fvPos.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}) +
"PV of Negative Flows: " + absPvNeg.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}) +
"Periods (n): " + n;
resultBox.style.display = 'block';
}