Tutorials › VEE Accounting and Finance › Checking IRR Roots With NPV Tables

VEE Accounting and Finance · IRR, Payback, and Alternatives · Tutorial 458 of 996

Checking IRR Roots With NPV Tables

Use trial-rate NPV calculations to check, locate, and distinguish possible IRR roots, including repeated roots that a sign-change scan can miss.

Intermediate 12 min read

What You'll Learn

  • Build an NPV table from dated project cash flows and trial discount rates.
  • Use NPV sign changes to bracket possible IRR roots.
  • Convert a discount factor root into the corresponding annual effective rate.
  • Use interpolation as an estimate, then verify it with NPV calculations.
  • Recognize why a repeated root may not cause NPV to change sign.
  • Check whether a numerical solver has missed or misreported roots.

Why Check an IRR Solver With an NPV Table?

An internal rate of return (IRR) is a discount rate that makes a project's net present value (NPV) equal to zero. For cash flows that change sign more than once, the NPV equation may have multiple roots. A numerical solver can report one root, depend on its starting guess, or fail to identify a root that touches zero without crossing it. A table of NPV values at carefully chosen trial rates provides a transparent check: it shows where NPV is positive or negative, brackets possible roots, and helps reveal when additional investigation is needed.

For this tutorial, assume cash flows occur at the ends of annual periods. Let \(C_t\) be the cash flow at time \(t\), where \(C_0\) occurs immediately and \(C_1,\ldots,C_n\) occur at the ends of years 1 through \(n\). At an annual effective discount rate \(r>-100\%\), the NPV is

$$ \operatorname{NPV}(r)=\sum_{t=0}^{n}\frac{C_t}{(1+r)^t} $$

An IRR is a value of \(r\) satisfying \(\operatorname{NPV}(r)=0\). The condition \(r>-100\%\) keeps every discount denominator positive and nonzero. In the examples, we focus on nonnegative IRRs unless stated otherwise. All cash flows and rates used in each NPV calculation must have matching timing and units.

Definition: An NPV table lists a project's NPV at selected trial discount rates. If NPV has opposite signs at two rates, then at least one root lies between them, provided NPV is continuous throughout that interval. A table helps locate and verify roots, but a finite set of trial rates does not, by itself, prove how many roots exist.

Turning Trial Rates Into a Root Check

For a project with annual cash flows, it is often convenient to write \(q=1/(1+r)\), the discount factor. Substituting this into the NPV equation gives

$$ \operatorname{NPV}(r)=C_0+C_1q+C_2q^2+\cdots+C_nq^n $$

For nonnegative \(r\), \(0<q\leq 1\). If an algebraic or solver result is first expressed as a root \(q\), convert it to a rate using \(r=1/q-1\). A discount factor is not itself the IRR. For example, \(q=10/11\) gives \(r=11/10-1=10\%\), not \(q-1\).

1
Choose a rate grid.
Evaluate NPV at several plausible trial rates. Use a wider range first if the likely root location is unknown.
2
Record the sign as well as the value.
A positive-to-negative or negative-to-positive change between adjacent grid rates brackets at least one root.
3
Refine each bracket.
Use smaller rate steps or a numerical solver initialized within the bracket. Linear interpolation can provide an estimate, not an exact root.
4
Verify the candidate.
Substitute the candidate rate into the original dated cash flows and recompute NPV. Check all separate brackets, and consider whether a repeated root could occur without a sign change.

Why a Sign Change Brackets a Root

For cash flows at finitely many fixed dates, NPV is a sum of continuous functions of \(r\) on any interval above \(-100\%\). It is therefore continuous there. If NPV is positive at one endpoint and negative at another, the intermediate value theorem guarantees that it equals zero somewhere between them. This guarantees at least one root in the interval; it does not guarantee exactly one.

A root can also occur where NPV just touches zero and returns to the same sign. In that case, a grid whose trial rates fall on either side of the root may show no sign change. A zero entry in the table can identify a root directly, but a grid that contains no zero and shows no sign changes cannot rule out a root between its trial rates.

Worked Example: Two Roots From a Sign-Changing Cash-Flow Pattern

A hypothetical project has cash flows of \(-\$100\) at time 0, \(+\$230\) at the end of year 1, and \(-\$132\) at the end of year 2. Construct an NPV table at 0%, 10%, 15%, 20%, and 25%. Use the table to locate and check the nonnegative IRRs.

Method. Calculate NPV from the original annual cash flows at each effective annual trial rate. Keep enough decimals to see the sign near zero. This avoids treating a discount factor as a rate or assuming that one solver output is the only root.

At a trial rate \(r\), the cash-flow equation is

$$ \operatorname{NPV}(r)=-100+\frac{230}{1+r}-\frac{132}{(1+r)^2}. $$

At 0%, NPV is \(-100+230-132=-\$2.00\). At 10%, it is \(-100+230/1.10-132/(1.10)^2=-100+209.0909-109.0909=\$0.0000\). At 15%, it is \(-100+230/1.15-132/(1.15)^2=-100+200-99.8110=\$0.1890\). At 20%, it is \(-100+230/1.20-132/(1.20)^2=-100+191.6667-91.6667=\$0.0000\). At 25%, it is \(-100+230/1.25-132/(1.25)^2=-100+184-84.48=-\$0.48\).

Trial rateNPVSign
0%−$2.0000Negative
10%$0.0000Zero
15%$0.1890Positive
20%$0.0000Zero
25%−$0.4800Negative

The table directly identifies roots at 10% and 20%. The sign pattern also makes the second root easy to overlook if a solver search begins near only one of them: NPV is positive at 15% and negative at 25%, so there is another root between those trial rates.

For an algebraic check, set \(q=1/(1+r)\). The zero-NPV equation is \(-100+230q-132q^2=0\), or \(132q^2-230q+100=0\). Its discriminant is \(230^2-4(132)(100)=52{,}900-52{,}800=100\). Thus \(q=(230\pm10)/264\), giving \(q=10/11\) or \(q=5/6\). Converting back, the rates are \(1/(10/11)-1=10\%\) and \(1/(5/6)-1=20\%\). Both match the table.

Check and trap avoided. Substitution gives NPV zero at both rates. A common mistake is to change the quadratic coefficient to 100 or to calculate the discriminant incorrectly; either error changes the roots. Another is to report \(q\) as the rate. Here, the two discount factors are \(10/11\) and \(5/6\), while the corresponding rates are 10% and 20%.

Interpolation Locates a Candidate, Not a Proof

When NPV values have opposite signs at two trial rates, linear interpolation estimates the rate at which NPV would reach zero if it changed linearly between those points. NPV generally is not linear in the discount rate, so the interpolated value is an estimate. It is useful for choosing the next trial rate, but it must be checked by recalculating NPV.

For trial rates \(r_L\) and \(r_H\), with NPVs \(N_L>0\) and \(N_H<0\), the linear-interpolation estimate is

$$ r_{\text{est}}=r_L+\frac{N_L}{N_L-N_H}(r_H-r_L). $$

The fraction is the proportion of the total NPV change needed to move from \(N_L\) to zero. This formula uses NPV values with their signs: replacing \(N_H\) by its absolute value in the denominator is equivalent here, but using \(N_L+N_H\) is not.

Worked Example: Refining a Root Bracket and Verifying Both Roots

A proposed equipment upgrade has cash flows \(-\$100\) now, \(+\$240\) at the end of year 1, and \(-\$143\) at the end of year 2. Use NPV values at 15%, 20%, 25%, and 35% to refine a bracket for the upper root, then verify the roots.

Method. Use the signs in the NPV table to identify brackets, interpolate within the bracket around the upper root, and check the resulting candidate against the original cash flows. This avoids mistaking an interpolated estimate for an exact IRR.

The NPV equation is \(-100+240q-143q^2\), where \(q=1/(1+r)\). At 15%, \(q=20/23\), so NPV is \(-100+4800/23-57200/529=300/529=\$0.5671\). At 20%, \(q=5/6\), so NPV is \(-100+200-3575/36=25/36=\$0.6944\). At 25%, NPV is \(-100+192-91.52=\$0.4800\). At 35%, \(q=20/27\), so NPV is \(-100+4800/27-57200/729=-500/729=-\$0.6859\).

Trial rateNPVSign
15%$0.5671Positive
20%$0.6944Positive
25%$0.4800Positive
35%−$0.6859Negative

The upper root is bracketed between 25% and 35%. Interpolating gives \(25\%+[0.4800/(0.4800+0.6859)](10\%)\), approximately 29.12%. This is a useful estimate, but it is not the exact root. The positive NPV at 15% and 20% also indicates that the table has not ruled out a lower root.

To verify, solve \(-100+240q-143q^2=0\), or \(143q^2-240q+100=0\). The discriminant is \(240^2-4(143)(100)=57{,}600-57{,}200=400\), so \(q=(240\pm20)/286\). The roots are \(q=10/11\) and \(q=10/13\), corresponding to rates \(11/10-1=10\%\) and \(13/10-1=30\%\). The exact upper root is 30%, consistent with the 25%–35% sign change. Substitution into the original NPV equation gives zero at both 10% and 30%.

Check and trap avoided. The interpolated 29.12% is close but not exact; at 30%, NPV is exactly zero. Do not conclude that 29.12% is the root simply because it is the interpolation output. Also, a table whose trial rates all lie above 10% could miss the lower root.

A Root Can Occur Without a Sign Change

A sign-change scan is a useful way to find brackets, but it cannot detect every root. A repeated root may touch the horizontal axis and turn back. The following example shows why a table should be treated as a diagnostic tool rather than a complete proof that no other roots exist.

Worked Example: Detecting a Repeated Root

A hypothetical project has cash flows \(-\$100\) at time 0, \(+\$220\) at the end of year 1, and \(-\$121\) at the end of year 2. Evaluate NPV at 0%, 5%, 10%, and 15%, and determine whether a sign-change scan alone would find the root.

Method. Evaluate each trial rate and then factor the NPV equation. Factoring checks whether a root exists even when the table does not show a sign change.

With \(q=1/(1+r)\), the NPV is \(-100+220q-121q^2=-100(1-1.1q)^2\). At 0%, \(q=1\), giving NPV \(-100(1-1.1)^2=-\$1.0000\). At 5%, \(q=20/21\), giving NPV \(-100(1-22/21)^2=-100/441=-\$0.2268\). At 10%, \(q=10/11\), giving NPV \(\$0.0000\). At 15%, \(q=20/23\), giving NPV \(-100(1-22/23)^2=-100/529=-\$0.1890\).

The table has negative NPVs on both sides of 10%; it shows no sign change. Yet the factorization gives a root when \(1-1.1q=0\), so \(q=10/11\) and \(r=11/10-1=10\%\). The squared factor means the root has multiplicity two: NPV reaches zero and returns to negative values. Substitution confirms the NPV is zero at 10%.

Check and trap avoided. A scan that looks only for adjacent NPVs with opposite signs would miss this root. A zero NPV at a trial rate identifies it directly; with a coarser grid, the factorization or a solver designed to search for stationary points may be needed.

Reading an NPV Table Carefully

A useful table records the rate, NPV, and sign for every trial point. Showing enough decimal places matters: rounding a small positive or negative NPV to zero can create a false impression of an exact root. If a value is close to zero, retain additional digits during calculation, then report the rounded result and its unrounded sign for the check.

A sign change between two rates proves at least one root in that interval, but not exactly one. Multiple roots may lie in a wide interval, and repeated roots may not change the sign at all. A denser grid can improve visibility but is still not a general proof that every root has been found. When cash flows are few, the equation in \(q\) may help verify the number and location of roots. In all cases, check a candidate by substituting its rate into the original cash-flow equation.

  • Use the same annual timing convention for all cash flows and trial rates.
  • Keep the signs of the cash flows; do not convert an outflow into an inflow to make the table easier.
  • Distinguish a zero displayed because of rounding from a true zero.
  • Do not treat an interpolation estimate or a solver output as verified until NPV has been recomputed.
  • Investigate multiple sign changes and possible repeated roots rather than assuming a single IRR.
Key takeaway: An NPV table is a root-checking tool. Opposite signs bracket at least one IRR, a zero entry can verify a candidate, and equal signs do not prove that no root lies between trial rates. Convert discount factors to rates correctly and check every candidate using the original cash flows.

Check Your Understanding

For each problem, use the stated annual cash-flow timing. Answers are provided so you can check both the calculation and the interpretation.

  1. A project costs $300 now and returns $180 after one year and $160 after two years. Calculate NPV at a 10% annual effective rate and state its sign. (Answer: \(-\$4.13\), negative.)
  2. A project has cash flows \(-\$40\), \(+\$100\), and \(-\$60\) at times 0, 1, and 2. An NPV table shows a zero at 0% and opposite signs at 25% and 60%. Factor the equation in \(q=1/(1+r)\) and identify its nonnegative IRRs. (Answer: 0% and 50%.)
  3. A project's cash flows are \(-\$25\), \(+\$60\), and \(-\$36\) at times 0, 1, and 2. Find the root and explain why trial rates of 10% and 30% do not bracket it by a sign change. (Answer: 20%; NPV is negative on both sides because the root is repeated.)
  4. A project pays \(-\$90\) now and \(+\$72\) after one year. An analyst searches only nonnegative rates and finds negative NPV at 0% and 20%. Determine whether a nonnegative IRR exists and calculate the rate if rates above \(-100\%\) are allowed. (Answer: No nonnegative IRR; the root is \(-20\%\).)
  5. A project has cash flows \(-\$100\), \(+\$425\), \(-\$575\), and \(+\$250\) at times 0 through 3. Its NPV table shows negative NPV at 20% and positive NPV at 30%. Write its NPV as a factored expression in \(q=1/(1+r)\), then identify all nonnegative roots. (Answer: \(-100(1-q)(1-1.25q)(1-2q)\); roots at 0%, 25%, and 100%.)
Clinical Biostats