Skip to content
InvestmentCalculator
All calculators

Bond yield calculator — methodology

Running yield against redemption yield, clean price against dirty price, the bisection that solves for a yield to maturity and how far it converges — and why a gilt’s exemption from capital gains tax makes two bonds with the same gross yield unequal after tax.

Open the bond yield calculator

A bond has more than one yield, and the difference between them is not a matter of presentation. This calculator computes three — running, redemption, and redemption after tax — and the third is where a UK investor’s answer stops resembling the number on the screen.

Nothing here is projected forward, and the distinction is worth stating because discounting a stream of future cash flows over a term has the shape of a projection. Those cash flows are contractual: a coupon and a redemption amount written into the instrument, not a growth rate anybody assumed. No field on this page compounds a balance forward at a rate the reader typed, which is why the page carries a verification stamp and no not-a-forecast disclaimer. The one genuine assumption inside a redemption yield is set out below.

The cash flows, and where accrued interest comes from

periods       = years to redemption × coupons a year        (may be fractional)
n             = ceil(periods)                              coupons still to come
first         = periods − (n − 1)                          when the next one arrives
coupon times  = first, first + 1, …, first + n − 1         the last one is at "periods"

accrued       = coupon per period × (1 − first)
dirty price   = clean price + accrued

The accrued interest is derived from the term rather than asked for, and that is deliberate: two fields could contradict each other, and a page that asked for both would have to decide which to believe. A bond 4.75 years from redemption paying half-yearly is 9.5 coupon periods out, so the next coupon is half a period away and half of one has accrued. Under the actual/actual (ICMA) convention gilts use, that same fraction is the days since the last coupon over the days in the coupon period — so a reader working from two dates arrives at the same number by a different route.

The two prices, and which yield is measured against which

running yield    = annual coupon ÷ CLEAN price
redemption yield = the rate y at which

                   Σ coupon/(1+y)^t  +  100/(1+y)^periods  =  DIRTY price

The redemption yield is solved against the dirty price because that is the money leaving your account. The running yield is quoted on the clean price because that is the market convention, and it is defensible for the opposite reason: accrued interest comes straight back in the next coupon rather than being a cost of holding the bond.

The running yield ignores the redemption date entirely, which is why it can be nothing like the redemption yield on a bond trading away from par. On this calculator’s own figures they are 0.29% and 2.98%. Both are correct; only one of them describes the return.

The solve: bisection, and how far it converges

There is no closed form for a redemption yield, so it is solved numerically. The present value above is strictly decreasing in the yield for every yield above −100%: every cash flow is non-negative and each is divided by (1 + y) raised to a strictly positive power. A strictly monotonic function whose bracket endpoints straddle the target has exactly one root inside it, and bisection finds it unconditionally — no derivative, no starting guess, and no possibility of stepping into the region where (1 + y) is negative and a fractional power becomes NaN.

Newton–Raphson converges faster and is what a spreadsheet uses. It was rejected because its failure modes are silent: a bad starting point on a deep discount or a long-dated bond can step past −1, and a fractional power of a negative number is a quiet NaN in IEEE-754 rather than an error — one that would surface several frames later with the wrong thing blamed. There are at most a few dozen solves per keystroke, so speed is not the constraint.

bracket    [-0.9999, 10] per coupon period
each step  halves it
after k    width = 10.9999 / 2^k

  20 steps → 1.0e-5
  40 steps → 1.0e-11
  60 steps → 9.5e-18

A double distinguishes about one part in 1e-16, so the answer is exact to the limit of the representation after roughly 60 iterations. The loop stops when the bracket is narrower than 1e-14 — four orders of magnitude below the precision any yield is displayed at — and is capped at 200 iterations regardless, because a loop that can only end on a tolerance can spin forever on a pathological input and one that can only end on a count does more work than it needs to on every ordinary one.

The solver is checked against three things a reader can verify without it. A bond priced at par yields its coupon exactly. A zero-coupon bond bought at half its redemption value over ten periods yields 2^(1/10) − 1, which is 7.1773% and is a closed form. And every solved yield is put back through the present value function and must reproduce the price it came from. Where no yield exists — a matured bond, a price of zero, or a price higher than the undiscounted cash flows could be worth — the solver returns nothing and the page says so, rather than reporting a bound as though it were an answer.

Two ways to turn a periodic yield into an annual one

effective = (1 + y)^n − 1        compounded; the basis a savings AER uses
nominal   = y × n                 multiplied; what a bond screen quotes

They do not agree, and on a semi-annual bond at 5% they differ by 6 basis points — more than the spread a retail buyer is usually choosing between. The page leads on the effective figure because it is the only one comparable with a savings account without a conversion, and shows the nominal one beside it because that is the convention a screen will have quoted. This is the same decision app/investment-calculator makes about a growth rate: ask, or show both, rather than picking one quietly.

The tax, and the exemption that is the point of the page

The two halves of a bond’s return are taxed completely differently in the UK, and the page’s whole argument follows from that:

  • The coupon is savings income. It is stacked above other income and below dividends, and it meets the starting rate for savings and the personal savings allowance before it meets any rate at all.
  • The capital return on a gilt is exempt from capital gains tax (TCGA 1992 s.115), so the pull from a discounted price up to 100 arrives untaxed. The exemption runs both ways: a capital loss on a gilt is not allowable, so a high-coupon gilt bought above par is taxed on the whole coupon and gets no relief for the fall back to par.

The after-tax yield is therefore the same solve over a different schedule: the coupons are reduced by the reader’s marginal rate on savings interest and the redemption amount is left alone.

marginal rate  = income tax(other income, interest + £100)
                 − income tax(other income, interest)        ÷ £100

net yield      = the rate y at which

                 Σ coupon × (1 − marginal rate)/(1+y)^t  +  100/(1+y)^periods
                 = dirty price

The rate is measured against the engine on the savings field, never read off Breakdown.marginalRate. That field is a forward difference on earned income — the engine says so — and it knows nothing about the starting rate for savings or the personal savings allowance, so on a page about a bond coupon it can report a positive rate for a reader whose next pound of interest is genuinely free. A £100 step is used rather than £1 because inside the personal allowance taper the surviving allowance is rounded up to a whole pound, so a £1 probe alternates between two rates.

Whether the exemption applies is an input. Gilts always qualify; whether a particular corporate bond does turns on the qualifying corporate bond rules and on that bond’s own terms, which a price and a coupon cannot reveal. Turned off, the page reports the same after-tax figure as an upper bound and says the capital element would be chargeable and is not priced here — computing it would need the size of the holding, the annual exempt amount and every other gain in the year, none of which this page asks for.

Rates and allowances

Read from the rules files this calculator runs on
Figure2025/262026/27
Starting rate band for savings£5,000 at 0.00%£5,000 at 0.00%
Personal savings allowance — basic / higher / additional£1,000 / £500 / £0£1,000 / £500 / £0
Savings rates, in stacking orderBasic rate 20.00% from £0; Higher rate 40.00% from £37,700; Additional rate 45.00% from £125,140Basic rate 20.00% from £0; Higher rate 40.00% from £37,700; Additional rate 45.00% from £125,140
Personal allowance£12,570£12,570
Other income — England, Wales and Northern IrelandBasic rate 20.00% from £0; Higher rate 40.00% from £37,700; Additional rate 45.00% from £125,140Basic rate 20.00% from £0; Higher rate 40.00% from £37,700; Additional rate 45.00% from £125,140
Other income — ScotlandStarter rate 19.00% from £0; Basic rate 20.00% from £2,827; Intermediate rate 21.00% from £14,921; Higher rate 42.00% from £31,092; Advanced rate 45.00% from £62,430; Top rate 48.00% from £125,140Starter rate 19.00% from £0; Basic rate 20.00% from £3,967; Intermediate rate 21.00% from £16,956; Higher rate 42.00% from £31,092; Advanced rate 45.00% from £62,430; Top rate 48.00% from £125,140

Savings rates are UK-wide and are not devolved. Scottish rates apply to a reader’s other income only, and that income still decides which savings band the coupon lands in. The personal savings allowance is not a fixed figure — it is £1,000 at the basic rate and nothing at the additional rate — so a bond large enough to move a reader up a band shrinks the allowance that was sheltering it.

Sources

The rates, thresholds and allowances used by this calculator were verified against gov.uk on . That covers the published rates, thresholds and allowances this page calculates with. It does not verify any figure the page produces for you: that is arithmetic on verified inputs. Parts of the engine behind it are checked against HMRC’s own published worked examples, which tests the method on a small number of scenarios rather than your answer, and most of the test suite derives its expected values by hand. That check was carried out automatically and no named person has signed it off yet.

The verification log, as recorded in the source repository
Figures coveredVerified onVerified byHuman sign-off
2025-262026-08-12Automated verification (Claude Opus 5)not yet signed off
2026-272026-08-12Automated verification (Claude Opus 5)not yet signed off
2020-21 to 2024-25 — pension annual allowance only2026-08-12Automated verification (Claude Opus 5)not yet signed off
2025-26 and 2026-27 — share identification window only2026-08-13Automated verification (Claude Opus 5)not yet signed off
2025-26 and 2026-27 — pension relief at source only2026-08-13Automated verification (Claude Opus 5)not yet signed off
2025-26 and 2026-27 — inheritance tax only2026-08-13Automated verification (Claude Opus 5)not yet signed off
2025-26 and 2026-27 — family tax, LISA and pension-access additions2026-08-13Automated verification (Codex)not yet signed off
2025-26 and 2026-27 — student loan deductions only2026-08-18Automated verification (Claude Opus 5)not yet signed off
2025-26 and 2026-27 — property acquisition tax only2026-08-18Automated verification (Claude Opus 5)not yet signed off
2025-26 and 2026-27 — automatic enrolment only2026-08-18Automated verification (Claude Opus 5)not yet signed off
2025-26 and 2026-27 — State Pension age and rates only2026-08-18Automated verification (Claude Opus 5)not yet signed off

The log covers the rules directory, not only this calculator. 8 rows are deliberately narrow — 2020-21 to 2024-25 — pension annual allowance only; 2025-26 and 2026-27 — share identification window only; 2025-26 and 2026-27 — pension relief at source only; 2025-26 and 2026-27 — inheritance tax only; 2025-26 and 2026-27 — student loan deductions only; 2025-26 and 2026-27 — property acquisition tax only; 2025-26 and 2026-27 — automatic enrolment only; 2025-26 and 2026-27 — State Pension age and rates only — and they verify the figures named there and nothing else. Those tax years are not modelled by any calculator on this site: the years this page can compute are the ones its tax-year selector offers, and no others.

A verification goes stale the moment one of its sources is updated past the date above. If a source below carries a later date than this stamp, trust the source.

Rates, thresholds and allowances on this page are taken from material published by HM Revenue & Customs and the Scottish Government. Contains public sector information licensed under the Open Government Licence v3.0.

Six things this calculation does not model

  • It assumes every coupon is reinvested at the yield itself. That is a property of what an internal rate of return is rather than a shortcut taken here, and it is true of every redemption yield on every screen. The lower the coupon, the less of the answer depends on it; on a zero-coupon bond the figure is exact.
  • It assumes the bond is held to redemption and that the issuer pays. No credit assessment of any kind is applied — a bond heading for default is priced at whatever yield its price implies, which is why that yield is high.
  • Conventional bonds redeeming at 100 only. Index-linked gilts have coupons and a redemption amount uplifted by inflation and cannot be described by a fixed schedule at all. Gilt strips are taxed on an annual deemed disposal rather than on redemption. Perpetuals never redeem; callable and convertible bonds let somebody change the schedule.
  • The accrued income scheme is not applied. Accrued interest built into the price is treated as interest for the seller and relieved for the buyer above a threshold on the nominal held; this page taxes the whole of the first coupon instead. The effect is small and it is against the reader, so the after-tax figures are slightly pessimistic for anyone buying part-way through a coupon period.
  • Deeply discounted securities are a separate regime. A bond issued at a deep discount can have its redemption profit charged as income rather than as a capital gain, which would remove the advantage this page is about. Gilts are outside that regime; a corporate bond may not be, and it turns on the terms it was issued under.
  • One marginal rate, applied to every future coupon. The rate is measured on the next pound of interest at today’s income and today’s rates, and then used unchanged for the whole term. Income moves, allowances move, and rates move.

This site publishes information, not advice. It cannot know your circumstances, it does not recommend any product, provider or course of action, and nothing on it is a personal recommendation. For a decision that matters, check the figures against gov.uk or speak to an accountant or a regulated adviser.

Every calculation runs in your browser. There is no application server and no database, so nothing you type is transmitted or stored. A share link is the exception: it carries your figures in the URL.

Found an error? It belongs on the corrections log, and how to report one is on that page.