The Rule of 72 (and Where It Breaks)
The Rule of 72 turns a return into a doubling time by simple division. Here is the exact formula behind it, and the volatility drag that makes it optimistic.
The Rule of 72 is the fastest arithmetic in personal finance: divide 72 by an annual percentage return and the answer is roughly how many years money takes to double. At 8% a year it says nine years, and the exact figure is 9.01. The shortcut is reliable in the band where people actually use it, and it has one failure mode that most explanations skip: real portfolios never earn the same return twice.
What is the Rule of 72?
Doubling time is a pure compounding question. Money growing at rate r multiplies by (1 + r) every year, so after t years it has grown by (1 + r) to the power t. Set that equal to 2 and the answer is exact: t = ln(2) / ln(1 + r), where ln is the natural logarithm.
ln(2) is 0.693. At small rates ln(1 + r) sits close to r itself, so the exact formula collapses to 0.693 divided by r, or 69.3 divided by the rate written as a percentage. That is the honest numerator. Under continuous compounding, where interest is credited every instant instead of once a year, 69.3 stops being an approximation and becomes the answer.
Why is it 72 and not 69.3?
Two reasons, neither of them theoretical. Mental arithmetic comes first: 72 divides cleanly by 2, 3, 4, 6, 8, 9 and 12, so the division works in your head at any rate a person is likely to quote, while 69.3 divides cleanly by nothing. Then there is where the error lands. The correction inside ln(1 + r) grows with the rate, so the numerator that would make the shortcut exact is not fixed: about 70 at 2% a year, 72.7 at 10%, near 76 at 20%. Choosing 72 centres the shortcut just under 8% a year, the middle of the range in which long-run equity returns get quoted.
How accurate is the Rule of 72?
The panel runs both calculations across eleven annual rates: the shortcut, the exact answer, and the distance between them in years.
| annual_return | rule_of_72_years | exact_years | gap_years |
|---|---|---|---|
| 1% | 72 | 69.66 | 2.34 |
| 2% | 36 | 35 | 1 |
| 3% | 24 | 23.45 | 0.55 |
| 4% | 18 | 17.67 | 0.33 |
| 6% | 12 | 11.9 | 0.1 |
| 8% | 9 | 9.01 | 0.01 |
| 10% | 7.2 | 7.27 | 0.07 |
| 12% | 6 | 6.12 | 0.12 |
| 15% | 4.8 | 4.96 | 0.16 |
| 20% | 3.6 | 3.8 | 0.2 |
| 25% | 2.88 | 3.11 | 0.23 |
The exact SQL behind every number
SELECT
concat(toString(annual_pct), '%') AS annual_return,
round(72.0 / annual_pct, 2) AS rule_of_72_years,
round(exact, 2) AS exact_years,
round(abs(72.0 / annual_pct - exact), 2) AS gap_years
FROM
(
SELECT
annual_pct,
log(2) / log(1 + annual_pct / 100.0) AS exact
FROM
(
SELECT arrayJoin([1, 2, 3, 4, 6, 8, 10, 12, 15, 20, 25]) AS annual_pct
)
)
ORDER BY annual_pct ASCThe error has a shape. At 8% a year the shortcut answers 9 years against an exact 9.01, a distance of 0.01 years. Anywhere from 4% to 15% the gap stays at or under 0.33 years, a few weeks of error on a decade-long question.
Below that band it opens up. At 2% a year the two answers sit 1 years apart, and at 1% they sit 2.34 years apart. Slow compounders are where that bites: a savings rate or an inflation rate has a doubling horizon measured in decades, and a year of error stays a year of error.
Above the band the sign flips. At 25% a year the shortcut answers 2.88 years and the exact calculation 3.11 years, so the fast answer is now the shorter one. The absolute gap stays modest, 0.2 years at 20%, though it is a visible slice of an answer that small.
Where the Rule of 72 breaks
Everything above assumes an identical return every year. No portfolio does that, and the distance between the two kinds of average is where the rule quietly fails.
The arithmetic average adds the yearly returns and divides by the count. The compound average, also called the compound annual growth rate, is the single fixed rate that would carry a starting balance to the ending balance. Only the second one moves money, and for any series that moves around it is the smaller of the two. Our note on how monthly returns are measured walks through that bookkeeping.
The size of the shortfall tracks variance. Volatility is the standard deviation of returns, the usual measure of how widely a series scatters around its own average, and variance is volatility squared. The working approximation: compound return sits near the arithmetic average minus half the variance. An 8% average with 20% volatility gives up half of 0.20 squared, which is 2 percentage points, leaving roughly 6% to compound. The panel holds the average at 8% and turns volatility up.
| annual_volatility | compound_return_pct | doubling_years |
|---|---|---|
| 0% | 8 | 9 |
| 5% | 7.88 | 9.1 |
| 10% | 7.5 | 9.6 |
| 15% | 6.88 | 10.4 |
| 20% | 6 | 11.9 |
| 25% | 4.88 | 14.6 |
| 30% | 3.5 | 20.1 |
| 35% | 1.88 | 37.3 |
The exact SQL behind every number
SELECT
concat(toString(vol_pct), '%') AS annual_volatility,
round(compound * 100, 2) AS compound_return_pct,
round(log(2) / log(1 + compound), 1) AS doubling_years
FROM
(
SELECT
vol_pct,
0.08 - 0.5 * pow(vol_pct / 100.0, 2) AS compound
FROM
(
SELECT arrayJoin([0, 5, 10, 15, 20, 25, 30, 35]) AS vol_pct
)
)
ORDER BY vol_pct ASCWith volatility at 0% the doubling time is 9 years, which is the Rule of 72's answer and the only case it was built for. At 20% volatility the compound rate falls to 6% and the doubling time stretches to 11.9 years. At 35% the same 8% average compounds at 1.88% and needs 37.3 years. The average return never changed. This is the mechanism behind a familiar complaint: the average was delivered, and the balance still took longer to double. Real returns against random walks follows the same thread.
Volatility drag in real price histories
The next two panels measure the same effect on five real price histories across the ten calendar years from 2015 through 2024. None of the five carried a stock split inside that window, so every daily move on the tape is a real move. These are price series only: dividends are not reinvested here, so a dividend payer's full compound return runs above the figure shown. The distance between the two averages, which is the subject, barely moves with that choice.
| ticker | annual_vol_pct | average_return_pct | compound_return_pct |
|---|---|---|---|
| SPY | 17.7 | 12.08 | 11.08 |
| QQQ | 21.8 | 18.45 | 17.42 |
| MSFT | 27.2 | 25.73 | 24.65 |
| ARKK | 38 | 17.65 | 10.96 |
| AMD | 58.7 | 54.96 | 46.41 |
The exact SQL behind every number
WITH daily AS
(
SELECT
ticker,
date,
toFloat64(max(close)) AS close_px
FROM global_markets.stocks_daily_aggs
WHERE ticker IN ('SPY', 'QQQ', 'MSFT', 'ARKK', 'AMD')
AND date >= '2015-01-02'
AND date <= '2024-12-31'
AND close > 0
GROUP BY ticker, date
),
rets AS
(
SELECT
ticker,
close_px / nullIf(lagInFrame(close_px) OVER (PARTITION BY ticker ORDER BY date ASC), 0) - 1 AS r
FROM daily
)
SELECT
ticker,
round(stddevSamp(r) * sqrt(252) * 100, 1) AS annual_vol_pct,
round(avg(r) * 252 * 100, 2) AS average_return_pct,
round((exp(avg(log(1 + r)) * 252) - 1) * 100, 2) AS compound_return_pct
FROM rets
WHERE r IS NOT NULL
AND isFinite(r)
GROUP BY ticker
ORDER BY annual_vol_pct ASCRows run from calmest to widest scatter. SPY moved 17.7% a year and turned an arithmetic average of 12.08% into 11.08% compounded. AMD, at 58.7%, turned 54.96% into 46.41%. Every row has the compound figure sitting below the average. That is the half-variance term, showing up on a real tape.
Now run the shortcut on both numbers.
| ticker | rule_of_72_years | compounded_years | extra_years | extra_time_pct |
|---|---|---|---|---|
| ARKK | 4.08 | 6.66 | 2.58 | 63.3 |
| SPY | 5.96 | 6.6 | 0.64 | 10.7 |
| AMD | 1.31 | 1.82 | 0.51 | 38.8 |
| QQQ | 3.9 | 4.32 | 0.41 | 10.6 |
| MSFT | 2.8 | 3.15 | 0.35 | 12.4 |
The exact SQL behind every number
WITH daily AS
(
SELECT
ticker,
date,
toFloat64(max(close)) AS close_px
FROM global_markets.stocks_daily_aggs
WHERE ticker IN ('SPY', 'QQQ', 'MSFT', 'ARKK', 'AMD')
AND date >= '2015-01-02'
AND date <= '2024-12-31'
AND close > 0
GROUP BY ticker, date
),
rets AS
(
SELECT
ticker,
close_px / nullIf(lagInFrame(close_px) OVER (PARTITION BY ticker ORDER BY date ASC), 0) - 1 AS r
FROM daily
),
stats AS
(
SELECT
ticker,
avg(r) * 252 AS arith_annual,
avg(log(1 + r)) * 252 AS log_annual
FROM rets
WHERE r IS NOT NULL
AND isFinite(r)
GROUP BY ticker
)
SELECT
ticker,
round(72.0 / (arith_annual * 100), 2) AS rule_of_72_years,
round(log(2) / log_annual, 2) AS compounded_years,
round(log(2) / log_annual - 72.0 / (arith_annual * 100), 2) AS extra_years,
round((log(2) / log_annual) / (72.0 / (arith_annual * 100)) * 100 - 100, 1) AS extra_time_pct
FROM stats
ORDER BY extra_years DESCThe first column divides 72 by the arithmetic average. The second is the doubling time implied by the rate the price history actually compounded at. The widest spread belongs to ARKK: the shortcut says 4.08 years, the compounded path 6.66 years, 63.3% longer. Even the tightest row, MSFT, runs 0.35 years past the shortcut's answer. A high average paired with a wide scatter is where the rule is least useful: the arithmetic average is the number in the pitch, the compounded rate is the number in the account.
Two uses that stay honest
The first is inflation. A price index compounds at a low and fairly steady rate, which is the regime the shortcut handles best. Divide 72 by an inflation rate and the answer is the years for prices to double, which is the same statement as the years for a dollar's purchasing power to halve.
| year | inflation_rate_pct | exact_halving_years | rule_of_72_years |
|---|---|---|---|
| 2000 | 2.8 | 25.1 | 25.7 |
| 2001 | 2.66 | 26.4 | 27.1 |
| 2002 | 2.51 | 27.9 | 28.6 |
| 2003 | 2.45 | 28.7 | 29.4 |
| 2004 | 2.45 | 28.6 | 29.3 |
| 2005 | 2.51 | 28 | 28.7 |
| 2006 | 2.54 | 27.6 | 28.4 |
| 2007 | 2.59 | 27.1 | 27.8 |
| 2008 | 2.82 | 24.9 | 25.5 |
| 2009 | 2.56 | 27.4 | 28.1 |
| 2010 | 2.39 | 29.3 | 30.1 |
| 2011 | 2.42 | 29 | 29.7 |
| 2012 | 2.47 | 28.4 | 29.1 |
| 2013 | 2.39 | 29.4 | 30.2 |
| 2014 | 2.28 | 30.7 | 31.6 |
| 2015 | 1.96 | 35.8 | 36.8 |
| 2016 | 1.76 | 39.7 | 40.9 |
| 2017 | 1.69 | 41.4 | 42.7 |
| 2018 | 1.55 | 45 | 46.4 |
| 2019 | 1.77 | 39.6 | 40.7 |
The exact SQL behind every number
WITH yearly AS
(
SELECT
toYear(date) AS year,
toYear(date) + 10 AS decade_later,
avg(toFloat64(cpi)) AS cpi_avg
FROM global_markets.inflation
WHERE date >= '1990-01-01'
AND date < '2026-01-01'
AND cpi > 0
GROUP BY year, decade_later
),
windows AS
(
SELECT
recent.year AS year,
pow(recent.cpi_avg / base.cpi_avg, 0.1) AS annual_factor
FROM yearly AS base
INNER JOIN yearly AS recent ON recent.year = base.decade_later
)
SELECT
year,
round((annual_factor - 1) * 100, 2) AS inflation_rate_pct,
round(log(2) / log(annual_factor), 1) AS exact_halving_years,
round(72.0 / ((annual_factor - 1) * 100), 1) AS rule_of_72_years
FROM windows
ORDER BY year ASCEach row annualizes US consumer price inflation over the ten calendar years ending in that row's year, then answers the halving question twice. Over the ten years ending 2025, prices compounded at 3.11% a year: the shortcut gives 23.1 years to halve a dollar, the exact formula 22.6. The oldest window on the panel, ending 2000, compounded at 2.8% for an exact halving time of 25.1 years. The two methods stay within about a year of each other down the whole panel, which is the behaviour the error table above describes at rates this low.
The second honest use is the head-check. Someone quotes a return, you divide 72 by it, and a doubling horizon appears with no spreadsheet. A 24% annual return claims a double every three years, which compounds to sixteen times the money in twelve years, and that is usually enough to end the conversation. It runs backwards too: a fund that genuinely doubled in six years compounded at about 12% a year. In that register the rule is a filter on arithmetic rather than a forecast, which is also how the 7 percent sell rule and the 3-5-7 rule in options earn their keep.
How these numbers were calculated
- The two theory panels hold no market data. They evaluate
ln(2) / ln(1 + r)and the half-variance approximation directly. - The equity panels read daily closes for the five tickers from 2015-01-02 through 2024-12-31, deduplicated to one close per ticker and session, with simple returns taken from the prior session's close and annualized on 252 sessions. Volatility is the sample standard deviation of daily returns times the square root of 252. The arithmetic average is the mean daily return times 252. The compound return is the mean daily log return times 252, exponentiated. Doubling time on the compounded path is ln(2) divided by the annual log return, which is exact for that rate.
- Compound return equals arithmetic average minus half the variance only as an approximation, and it loosens as returns get large, so both figures are measured directly rather than derived from one another. The inflation panel averages the consumer price index over each calendar year and annualizes the ratio against the year ten years earlier.
FAQ
What is the Rule of 72 formula?
Divide 72 by the annual percentage rate of return and the result is the approximate number of years for a balance to double. The exact version is t = ln(2) / ln(1 + r), with r written as a decimal.
Is the Rule of 72 accurate?
Near 8% a year it is accurate to a rounding error: the panel above puts the two answers 0.01 years apart. The gap widens toward low rates, reaching 2.34 years at 1% a year, and above roughly 8% the shortcut's answer becomes the shorter of the two.
Why is the number 72 instead of 69.3?
69.3 is the mathematically clean numerator, and it survives no mental arithmetic. 72 divides evenly by 2, 3, 4, 6, 8, 9 and 12, and the small upward adjustment lands the shortcut almost exactly on the exact answer just under 8% a year.
Does the Rule of 72 work for inflation?
Yes, and it is one of the better uses. Dividing 72 by an inflation rate gives the years for prices to double, which is the years for purchasing power to halve. At the 3.11% ten-year rate ending 2025, that is 23.1 years.
Why does a portfolio double later than the Rule of 72 says?
The rule assumes one constant return. A volatile series compounds at roughly its arithmetic average minus half its variance, so the realized doubling time runs longer. Across the five price histories above, the smallest overrun was 0.35 years and the largest 2.58 years. Spreading purchases over time, as in dollar cost averaging, changes the cash-flow pattern rather than the compounding math.
Every panel on this page ships the SQL that produced it, so the distance between a shortcut and an exact answer is auditable rather than asserted. The same doubling-time questions can be asked in plain English on the Strasmore terminal.