Financial Literacy Calculator

Two calculators. The first compounds a lump sum and shows what inflation does to it. The second adds money every year and runs a fat-tailed Monte Carlo over the result — reported as percentiles, because the average outcome of a compounding process is not the typical one.

Nominal value
—
 
Real value
—
today's purchasing power
Money in
—
what you contributed
Growth
—
 

This tab is deterministic: one rate, every year, no variation. That is what the textbook formula assumes, and it is why the second tab exists.

Nominal vs real, year by year

Nominal Real (today's dollars) Principal
The formula, and the one thing it hides

FV = PV × (1 + r)n — future value, present value, rate, years.

What it hides is inflation. At 3.1% — the long-run US average since 1928 — prices roughly double every 23 years. A projection that reports only the nominal number is answering a question nobody asked. The gold line is the same money measured in today's purchasing power, and the gap between the two lines is the entire reason to care about real returns rather than nominal ones.

The other thing this tab hides is that no asset returns the same number every year. Feeding a single rate into a compounding formula produces a single confident-looking answer whose confidence is an artefact of the assumption. That is the second tab's job.

Show as table
What this model does, and what the old one got wrong

This page was rewritten in September 2026. The version published here in February 2025 had two defects that changed its answers, not just its appearance.

1. The printed formula and the running code disagreed by a factor of (1+r)

The page displayed FV = PMT × [((1+r)n − 1) / r], which is an ordinary annuity — the payment arrives at the end of each period and the final one earns nothing. The simulation underneath did value = (value + PMT) × (1 + r), adding the payment before growing it, which is an annuity-due. Annuity-due is the ordinary result times (1+r), so at 5% the two panels of the same page were 5% apart by construction. At $1,000/yr for 10 years: $12,577.89 against $13,206.79.

Both conventions are legitimate; using one and printing the other is not. Timing is now an explicit control, and the "textbook answer" figure recomputes to match whichever you pick.

2. Normal returns on a compounding process, reported as a mean

The old model drew each year's return from a normal distribution and reported the average and standard deviation of the final values. Three problems compound there.

  • A normal return can fall below −100%. At 5% ± 15% that is vanishingly rare, but it is the wrong shape: an asset cannot lose more than all of itself. Returns are modelled here in log space, which cannot.
  • The mean is the wrong summary. Terminal wealth from a compounding process is right-skewed: a few enormous paths pull the average above what most runs achieve, so the mean is beaten by fewer than half of outcomes. Percentiles are reported instead, and the mean is shown with the fraction of runs that actually exceed it.
  • Volatility was fixed at 15% and could not be changed, which is neither the S&P's 18.9% nor a balanced portfolio's ~9.5%. It is now an input, with historical presets.

Volatility drag — the number this page exists to show

If returns vary, the rate you compound at is below the rate you average. The gap is approximately half the variance:

geometric ≈ arithmetic − σ²/2

The S&P 500 over 1928–2026 is the clean demonstration: arithmetic mean 11.9%, standard deviation 18.86%, and 11.9 − 0.1886²/2 = 10.12% — against a realised geometric return of 10.1%. The approximation lands within two basis points of a century of data.

This is why entering "9%" and seeing a median below a 9% compounding curve is not a bug. Losing 50% then gaining 50% averages zero and leaves you down 25%.

How a year is generated

Given an arithmetic mean μ and standard deviation σ of simple annual returns, the log-space parameters are moment-matched so the simulated distribution reproduces both:

s² = ln(1 + σ²/(1+μ)²)  ·  m = ln(1+μ) − s²/2

Each year's gross return is exp(m + s·ε). With ε normal this is standard geometric Brownian motion, giving E[gross] = 1+μ and Var = σ² exactly.

Fat tails. With the Student-t option, ε is a t-distributed draw with ν=5, rescaled by √((ν−2)/ν) so the variance is unchanged and only the shape moves. Real equity returns have far more 30%-plus drops than a bell curve predicts; ν=5 is a common choice for annual equity data, and lower ν means heavier tails.

One subtlety that is easy to get wrong. The Student-t has no finite exponential moment, so exp(t) has infinite expectation — an unclipped fat-tailed log return implies infinite expected wealth, and the sample mean never settles. Draws are therefore clipped at ±4.5 standard deviations, which at S&P volatility is about −48% to +135% in a single year. That is slightly wider than the worst and best years on record (−43% in 1931, +54% in 1933) and binds on roughly 0.2% of draws. With tails on, the arithmetic mean is preserved only approximately; the percentiles are the robust output.

Fat tails matter far less here than you would expect — and that is the point

Retirement calculators advertise fat-tail modelling as though it transforms the answer. Measured against this model, over a contribution plan, it barely moves anything you would act on. Toggle it and watch: the median shifts by a fraction of a percent, and the P10–P90 range actually gets slightly narrower.

That narrowing is not a bug. A Student-t rescaled to the same variance is more peaked in the middle and heavier only in the far tails — the variance is spent on rare extremes instead of the body. Standardised draws, 400,000 samples:

P10P1P0.1worst
Normal−1.28−2.33−3.10−4.54
Student-t, ν=5−1.14−2.60−4.53−16.89

So P10 and P90 are the wrong place to look for tails, which is why P1 and the worst run are reported above.

Then time dilutes even that. Thirty years of returns is a sum of thirty independent log draws, and sums tend toward normal whatever the pieces look like. P1 of terminal wealth at S&P parameters, fat versus normal, three independent repeats of 200,000 paths each:

Horizon3 yr5 yr10 yr20 yr30 yr
P1, fat vs normal−2.0 to −2.3%−1.6 to −2.0%−0.7 to −1.4%+0.1 to +0.9%+0.7 to +1.8%

And a caution about the one number that does move. An earlier draft of this note claimed the worst path runs "20–26% lower" with tails on. That was a single measurement of a statistic too noisy to quote: the minimum of N paths is the most sample-dependent thing in the output. Repeating it five times at 200,000 paths gave −12%, −18%, −20%, −32% and −4%; at the 4,000 paths this page runs by default, individual repeats came out at −17%, −14%, +8%, −20% and +39%. The direction is usually negative — 13 of 15 repeats — but the magnitude is not a number anyone should rely on, and you will sometimes see the "worst run" figure improve when you switch tails on. That is sampling noise, not a model error, and it is why the headline statistic to read is P1.

The honest conclusion: for a long contribution plan the shape of a single year's tail is second-order. What actually moves the answer is μ, σ, how much you put in, and how long. The toggle stays because demonstrating that is worth more than implying the opposite — and because at short horizons, or when drawing down rather than contributing, the tail is exactly what gets you.

What is still not modelled

  • Negative skew. The t-distribution is symmetric. Real markets fall faster than they rise, so the downside here is still slightly flattering.
  • Serial correlation. Years are independent draws. Real markets show mild mean reversion over long horizons, which narrows the fan; they also show momentum and volatility clustering, which widens it.
  • Taxes, fees and withdrawals. None. A 1% annual fee is a direct subtraction from μ, so enter 8.1% rather than 9.1% if you want to see it.
  • Sequence-of-returns risk while drawing down. This model only contributes. Order of returns barely matters when contributing and matters enormously when withdrawing.
  • Inflation is deterministic — a fixed rate, not itself simulated.

Sources for the presets

Originally published February 2025 at this address; rewritten in September 2026 — the earlier version printed an ordinary-annuity formula while computing an annuity-due, drew normally-distributed returns, and reported a mean where the distribution is right-skewed.
Educational tool. Historical averages are estimates over one particular past, not forecasts, and nothing here is investment advice.