- Relative residual
- {{ formatResidual(root.residual) }}
- Isolation domain
- Positive discount factors
- Final bracket width
- {{ formatPercent(root.bracketWidth) }}
Internal Rate of Return Calculator
Calculate periodic IRR for ordered cash flows and inspect every validated root, comparison NPV and convergence result before making a decision.{{ summaryTitle }}
{{ summaryLine }}
{{ primaryCopyAnnouncement }}
- {{ row.label }}
- {{ row.display }}
Calculation method:
- {{ row.label }}
- {{ row.display }}{{ row.detail }}
{{ chartExportStatus }}
The chart renderer is unavailable. The same discounted values remain in the cash-flow ledger.
| Period | Cash flow | Discount factor | Discounted contribution | Copy |
|---|---|---|---|---|
| {{ row.period }} | {{ formatCashFlow(row.cashFlow) }} | {{ formatFactor(row.discountFactor) }} | {{ formatCashFlow(row.discountedCashFlow) }} | |
| NPV at {{ formatPercent(computation.values.hurdle_rate) }} | {{ formatCashFlow(computation.values.hurdle_npv) }} | |||
{{ ledgerExportStatus }}
Cash flows spread across time cannot be compared by adding them alone. An amount received later is discounted because capital has an opportunity cost and future forecasts carry risk. Net present value (NPV) applies a chosen discount rate to that timing. Internal rate of return (IRR) reverses the question and finds the rate that makes the cash-flow series have an NPV of zero.
IRR is a rate per cash-flow interval. Monthly rows produce a monthly IRR, quarterly rows a quarterly IRR, and annual rows an annual IRR. The intervals must be equal. A list of actual transaction dates needs XIRR or another date-aware method because ordinary periodic IRR does not infer day counts or annualize its answer.
- Negative cash flow
- Money invested, paid, or otherwise leaving the project at that period.
- Positive cash flow
- Money returned or received at that period.
- Hurdle rate
- A separately chosen comparison rate used to calculate NPV. It does not select or change an IRR root.
- IRR root
- A rate greater than −100% at which the ordered periodic cash flows sum to zero after discounting.
A conventional project often has one initial outflow followed by inflows and therefore one economically relevant root. Cash flows that change sign more than once can have several IRRs or none. In that situation, reporting the first rate found by a guess-based solver can create false certainty. Every valid root must be considered alongside NPV, financing assumptions, project scale, and the reason cash-flow signs reverse.
IRR also hides scale. A small project with a high rate can create less value than a larger project with a lower rate. It assumes only the zero-NPV relationship represented by the cash flows; it does not by itself establish a reinvestment rate, forecast quality, financing availability, or investment suitability.
Use IRR as calculation evidence within a broader decision. Forecast errors, omitted cash flows, unequal timing, and multiple roots can matter more than extra decimal places in the reported rate.
How to Use This Tool:
Keep every row in one currency or unit and one equal time interval, starting with period 0 now.
- Enter 2 to 30 ordered Cash flows. Use negative values for outflows and positive values for inflows, with at least one of each sign.
- Add or remove period rows until the sequence matches the full decision horizon. Do not omit a terminal cost, salvage value, or intermediate reinvestment merely because it changes the result.
- Use a supplied example to examine a one-root, multiple-root, or no-root pattern, or replace every amount with your own cash flows.
- Open Advanced to set the Hurdle rate per period. This changes comparison NPV and discounted contributions only.
- Read the finding before the percentage. A result may show one distinct root, several roots, no finite root, or incomplete numerical certification.
- Check sign changes, root residuals, and NPV contributions before using the result. For irregular dates, stop and use a date-aware XIRR method instead.
Interpreting Results:
| Finding | Meaning | Decision check |
|---|---|---|
| One distinct root | One validated rate above −100% makes periodic NPV approximately zero. | Compare NPV at the hurdle rate and verify the equal-period forecast. |
| Multiple distinct roots | More than one rate satisfies the IRR equation. | Do not choose the most attractive root; use NPV and cash-flow economics to evaluate the project. |
| No finite IRR | No validated rate above −100% makes NPV zero. | Use NPV or another decision measure rather than forcing a percentage. |
| Solver incomplete | The full root set could not be certified within the numerical bounds. | Do not substitute a guessed result; verify with an independent numerical method. |
Cash-flow sign changes are an ambiguity warning, not a root count. One sign change is consistent with at most one positive discount-factor root. More sign changes permit multiple roots but do not guarantee them.
The hurdle-rate NPV answers a different question from IRR. Positive NPV means the entered cash flows exceed the chosen periodic discount requirement; negative NPV means they fall short. Changing that hurdle does not alter any IRR shown.
Technical Details:
Periodic IRR is defined by the ordered cash-flow sequence rather than by a starting guess. Period 0 is undiscounted. Each later amount is divided by one plus the periodic rate raised to its period number.
Formula Core:
For cash flows C0 through Cn, every reported IRR r satisfies the zero-NPV equation in the domain r > −1.
The hurdle-rate NPV uses the same sum with the entered comparison rate instead of a solved root. Compensated summation reduces accumulated floating-point error in that comparison.
Transformation Core:
Substituting x = 1 / (1 + r) changes the problem into finding every positive real root of a cash-flow polynomial. Each positive x maps back to one finite rate above −100%.
- Leading and trailing zero coefficients are removed without changing the finite root set.
- Derivative roots divide the positive domain into intervals where the polynomial is monotonic.
- Sign-changing intervals are solved by bounded bisection; stationary roots are tested separately.
- Near-duplicate candidates are merged, then each root must meet a relative polynomial residual of at most 5 × 10−9.
- Validated roots are converted to percentages and sorted from lowest to highest.
The solver supports cash-flow magnitudes up to 1015, a hurdle rate greater than −99.99% and no more than 1,000,000%, and up to 220 bisection iterations per bracket. These are numerical operating bounds, not reasonable financial assumptions.
Limitations:
- Intervals are equal and dates are not accepted or inferred.
- The periodic rate is not automatically annualized. Compounding a monthly or quarterly IRR requires an explicit frequency assumption.
- IRR does not resolve mutually exclusive projects with different sizes or timing as reliably as a well-chosen NPV comparison.
- No reinvestment rate is assumed; modified IRR (MIRR) is a different measure.
- Forecast quality, taxes, financing constraints, risk, and liquidity remain outside the calculation.
Worked Examples:
One periodic return
Cash flows of −100,000, 30,000, 35,000, 40,000, and 45,000 have one validated IRR of about 17.0937% per period. At a 10% hurdle rate, their NPV is about 16,986.54 in the same cash-flow unit.
Two valid roots
Cash flows of −100, 230, and −132 change sign twice and produce two IRRs: 10% and 20% per period. Both solve the equation. The sequence needs an NPV-based decision rule rather than selecting one IRR.
References:
- OpenFormula IRR specification, OASIS OpenDocument Version 1.4, 2025.
- IRR function, Microsoft Support.
- numpy-financial IRR documentation, NumPy community.