Skip to content
Sign in
Decay calculator validation — the decay law and the half-lives it uses

Validation of the decay calculator

The arithmetic is worked here by hand and set against what the tool returns. The half-lives the arithmetic rests on are a separate question, and are compared against an evaluation carried out independently of the one this site draws on.

Subject
The decay calculator at /calc/decay/, its three modes, and the engine module src/engine/decay.ts.
Report date
2026-09-17
Source revision
09c0347
Archived source
10.5281/zenodo.22794265
Checks performed
116
Acceptance criteria
Mathematics: relative difference below 1e-12. Half-lives: within 3 standard uncertainties of the independent value. Worked cases: below 1e-9.
Largest found
2.220e-16 on the mathematics, 2.82σ on the half-lives (Cs-137)
Result
All checks pass.

Scope

This report covers the decay calculator: the three questions it answers — how much is left after a given time, when the activity reaches a target, and what half-life two measurements imply — together with the half-lives those answers rest on and the cases in which the calculator must refuse. It does not cover the ingrowth of daughters, the specific-activity conversion, or any other calculator on this site.

Why this report is built differently from the converter's

The unit converter rests entirely on definitions, so its report could be complete: a finite list of units, each derived from a published definition. A decay calculation rests on two things of very different character, and treating them as one would make the result meaningless.

The first is mathematics. The decay law and its inverse are exact. One half-life leaves exactly one half, not approximately; the statement can be checked by hand with no data at all, and any disagreement beyond the resolution of the arithmetic is a defect. That part is validated to the same standard as the converter.

The second is measured data. A half-life is not defined, it is measured, and evaluators differ because they weight the underlying experiments differently. Asking whether a half-life is "correct" to some percentage is the wrong question. The right one is whether it agrees with an independent evaluation within the uncertainty that evaluation publishes, and that is how the second section judges it.

Choosing something independent to compare against

This matters more than it first appears. The nuclear data on this site come from the IAEA's Livechart interface, which serves the evaluated nuclear structure data file, ENSDF. The obvious place to check a half-life is the National Nuclear Data Center at Brookhaven — and it would be the wrong place, because it serves the same file. Agreement would demonstrate nothing except that two copies of one evaluation match.

The comparison here is against the Decay Data Evaluation Project, published by the BIPM as Monographie-5, the Table of Radionuclides, and maintained in per-nuclide form by the LNE-LNHB. It is a separate evaluation, it publishes a standard uncertainty with every recommended value, and those uncertainties are what make a quantitative verdict possible rather than a vague one. That it is the international metrology community's own table is worth noting: it is the reference a calibration laboratory would reach for.

Each value below is quoted in the form it appears in the DDEP sheet, so that a reader can open the sheet and compare characters rather than trusting a transcription. That is not decoration: an automatic reading of those sheets initially took the half-life of U-238 to be 24.10 days, because each sheet also carries the daughter's half-life and 24.10 d is thorium-234. The values here were taken from the line naming the right isotope.

The implementation under test

The three modes are three expressions:

lambda      = (tHalfS) => LN2 / tHalfS
decayActivity        = a0 * Math.exp(-lambda(tHalfS) * elapsedS)
elapsedFromRatio     = -Math.log(ratio) / lambda(tHalfS)
halfLifeFromTwoPoints = (LN2 * elapsedS) / Math.log(a0 / a1)

There is no series expansion and no iteration, so there is no accumulation of error to bound — the only question is whether these are the right expressions and whether the library's exponential and logarithm are faithful. Both are settled by the identities below, which fail immediately if either is wrong.

Exact identities

These hold for every half-life, which is what makes them identities rather than test values. Each is therefore checked at 5 half-lives spanning seventeen orders of magnitude, from one second to 10¹⁷ seconds; the table shows the value at one day and the worst disagreement seen across all of them.

Identity Hand Tool Worst difference
One half-life leaves one half D-ID-01 5×10⁻¹ 5×10⁻¹ 0
Two half-lives leave a quarter D-ID-02 2.5×10⁻¹ 2.5×10⁻¹ 0
Three half-lives leave an eighth D-ID-03 1.25×10⁻¹ 1.25×10⁻¹ 2.22e-16
Ten half-lives leave about a thousandth D-ID-04 9.765625×10⁻⁴ 9.765625×10⁻⁴ 0
No time elapsed leaves everything D-ID-05 1×10⁰ 1×10⁰ 0
Half of a half-life leaves one over root two D-ID-06 7.07106781187×10⁻¹ 7.07106781187×10⁻¹ 1.57e-16
log₂10 half-lives leave exactly one tenth D-ID-07 1×10⁻¹ 1×10⁻¹ 1.39e-16
The decay constant times the half-life is ln2 D-ID-08 6.9314718056×10⁻¹ 6.9314718056×10⁻¹ 0
The time to fall to one half is one half-life D-ID-09 1×10⁰ 1×10⁰ 0
The time to fall to one tenth is log₂10 half-lives D-ID-10 3.32192809489×10⁰ 3.32192809489×10⁰ 1.34e-16
A halving over a measured interval returns that interval D-ID-11 1×10⁰ 1×10⁰ 1.11e-16
A fall by 1024 over an interval returns a tenth of it D-ID-12 1×10⁻¹ 1×10⁻¹ 1.39e-16
Decay over two intervals is the product of the two D-ID-13 1×10⁰ 1×10⁰ 1.11e-16
Forward and inverse round-trip D-ID-14 1×10⁰ 1×10⁰ 0
Derivations of the identities

D-ID-01 — One half-life leaves one half

  1. The decay law is A(t) = A₀·e^(−λt), with λ = ln2 / T½.
  2. At t = T½ the exponent is −(ln2 / T½)·T½ = −ln2.
  3. e^(−ln2) = 1/2 exactly, by the definition of the natural logarithm.
  4. A(T½)/A₀ = 1/2. This is what the half-life means, so the tool must reproduce it exactly.

D-ID-02 — Two half-lives leave a quarter

  1. The exponent is −2·ln2.
  2. e^(−2·ln2) = (e^(−ln2))² = (1/2)² = 1/4.
  3. A/A₀ = 0.25.

D-ID-03 — Three half-lives leave an eighth

  1. e^(−3·ln2) = (1/2)³ = 1/8.
  2. A/A₀ = 0.125.

D-ID-04 — Ten half-lives leave about a thousandth

  1. e^(−10·ln2) = (1/2)¹⁰ = 1/1024.
  2. A/A₀ = 9.765625 × 10⁻⁴. The rule of thumb that ten half-lives is a factor of a thousand is this number rounded.

D-ID-05 — No time elapsed leaves everything

  1. e⁰ = 1.
  2. A(0)/A₀ = 1 exactly. A calculator that drifts here has a bug in the exponent.

D-ID-06 — Half of a half-life leaves one over root two

  1. e^(−0.5·ln2) = (1/2)^(1/2) = 1/√2.
  2. A/A₀ = 0.7071067812. The curve is not a straight line: half the time does not leave three quarters.

D-ID-07 — log₂10 half-lives leave exactly one tenth

  1. Take t = T½·log₂10, that is 3.321928095 half-lives.
  2. The exponent is −ln2·log₂10 = −ln10.
  3. e^(−ln10) = 1/10 exactly.
  4. A/A₀ = 0.1. This is the decade the field calls 'about three and a third half-lives'.

D-ID-08 — The decay constant times the half-life is ln2

  1. λ is defined as ln2 / T½.
  2. So λ·T½ = ln2 = 0.6931471806, whatever the half-life is.
  3. Checked across half-lives spanning seventeen orders of magnitude.

D-ID-09 — The time to fall to one half is one half-life

  1. The inverse is t = −ln(A/A₀)/λ.
  2. With A/A₀ = 1/2: t = −ln(1/2)·T½/ln2 = ln2·T½/ln2 = T½.
  3. The answer is exactly one half-life — the forward and inverse forms must agree here or one of them is wrong.

D-ID-10 — The time to fall to one tenth is log₂10 half-lives

  1. t = −ln(0.1)·T½/ln2 = ln10·T½/ln2 = T½·log₂10.
  2. That is 3.321928095 half-lives, the inverse of D-ID-07.

D-ID-11 — A halving over a measured interval returns that interval

  1. The two-point form is T½ = ln2·t / ln(A₀/A₁).
  2. If the second reading is exactly half the first, ln(A₀/A₁) = ln2.
  3. T½ = ln2·t/ln2 = t. The half-life is the interval itself.

D-ID-12 — A fall by 1024 over an interval returns a tenth of it

  1. If A₁ = A₀/1024 then ln(A₀/A₁) = ln1024 = 10·ln2.
  2. T½ = ln2·t/(10·ln2) = t/10.
  3. Ten half-lives fitted into the interval, so each is a tenth of it.

D-ID-13 — Decay over two intervals is the product of the two

  1. e^(−λ(t₁+t₂)) = e^(−λt₁)·e^(−λt₂), because the exponential turns addition into multiplication.
  2. So decaying for t₁ and then for t₂ must give the same answer as decaying once for t₁+t₂.
  3. The ratio of the two ways is 1. A calculator that accumulates an error per step fails here and nowhere else.

D-ID-14 — Forward and inverse round-trip

  1. Decay for t, then ask the inverse how long that took.
  2. elapsed(A(t)/A₀) must return t. The ratio of the two is 1.
  3. This is the pair of functions the 'how much is left' and 'when does it reach' modes use.

Half-lives against an independent evaluation

The column headed σ is the difference expressed in standard uncertainties of the DDEP value: a figure below one means the two evaluations agree within the published uncertainty, and the acceptance criterion is 3, the usual coverage factor. Judging by percentage instead would be meaningless here, because the uncertainties differ by two orders of magnitude between nuclides — Ni-63 carries ±2.4% and Ir-192 ±0.018%.

Nuclide DDEP DDEP [s] This site [s] Difference σ
Co-60 D-HL-01 5,2711 (8) a 1.6633985×10⁸ 1.6634419×10⁸ +0.0026% 0.17
Cs-137 D-HL-02 30,018 (22) a 9.4727659×10⁸ 9.4923233×10⁸ +0.2065% 2.82
I-131 D-HL-03 8,0233 (19) d 6.9321312×10⁵ 6.9337728×10⁵ +0.0237% 1.00
Ir-192 D-HL-04 73,827 (13) d 6.3786528×10⁶ 6.3788256×10⁶ +0.0027% 0.15
Mo-99 D-HL-05 2,7479 (6) d 2.3741856×10⁵ 2.373264×10⁵ -0.0388% 1.78
Tc-99m D-HL-06 6,0067 (10) h 2.162412×10⁴ 2.162592×10⁴ +0.0083% 0.50
F-18 D-HL-07 1,82890 (23) h 6.58404×10³ 6.5862×10³ +0.0328% 2.61
Ga-67 D-HL-08 3,2613 (5) d 2.8177632×10⁵ 2.8181088×10⁵ +0.0123% 0.80
Tl-201 D-HL-09 3,0421 (17) d 2.6283744×10⁵ 2.628288×10⁵ -0.0033% 0.06
I-125 D-HL-10 59,388 (28) d 5.1311232×10⁶ 5.1327648×10⁶ +0.0320% 0.68
Se-75 D-HL-11 119,781 (24) d 1.0349078×10⁷ 1.0348992×10⁷ -0.0008% 0.04
P-32 D-HL-12 14,273 (7) d 1.2331872×10⁶ 1.2327552×10⁶ -0.0350% 0.71
Sr-90 D-HL-13 28,80 (7) a 9.0884022×10⁸ 9.1231073×10⁸ +0.3819% 1.57
H-3 D-HL-14 12,312 (25) a 3.8852919×10⁸ 3.8878133×10⁸ +0.0649% 0.32
Na-22 D-HL-15 2,6029 (8) a 8.213959×10⁷ 8.210481×10⁷ -0.0423% 1.38
Cs-134 D-HL-16 2,0644 (14) a 6.5146172×10⁷ 6.5171364×10⁷ +0.0387% 0.57
Eu-152 D-HL-17 13,522 (16) a 4.267131×10⁸ 4.2655497×10⁸ -0.0371% 0.31
Kr-85 D-HL-18 10,752 (23) a 3.3930035×10⁸ 3.3888983×10⁸ -0.1210% 0.57
Ni-63 D-HL-19 98,7 (24) a 3.1146712×10⁹ 3.1809381×10⁹ +2.1276% 0.87
C-14 D-HL-20 5700 (30) a 1.7987463×10¹¹ 1.7987448×10¹¹ -0.0001% 0.00
Am-241 D-HL-21 432,6 (6) a 1.3651537×10¹⁰ 1.3651526×10¹⁰ -0.0001% 0.00
Pu-239 D-HL-22 24100 (11) a 7.6052254×10¹¹ 7.6083749×10¹¹ +0.0414% 0.91
Ra-226 D-HL-23 1600 (7) a 5.0491123×10¹⁰ 5.0491082×10¹⁰ -0.0001% 0.00
U-238 D-HL-24 4,468 (5) 10^9 a 1.4099646×10¹⁷ 1.4099635×10¹⁷ -0.0001% 0.00

The median difference across the 24 nuclides is 0.0328%, and the largest is Cs-137 at 2.82σ. That one is worth a sentence, because it is not noise: the DDEP re-evaluation of caesium-137 recommends a shorter half-life than the ENSDF value this site carries, and the difference of about 0.2% is real and traceable to the evaluations rather than to any calculation. Over a thirty-year storage period it amounts to about a tenth of a percent in the remaining activity, which is far below the uncertainty of any measurement it would be compared with, but it is a difference and this report does not hide it.

The lines as they appear in the DDEP sheets
  • Co-60 — T1/2(60Co ) : 5,2711 (8) a
  • Cs-137 — T1/2(137Cs ) : 30,018 (22) a
  • I-131 — T1/2(131I ) : 8,0233 (19) d
  • Ir-192 — T1/2(192Ir ) : 73,827 (13) d
  • Mo-99 — T1/2(99Mo ) : 2,7479 (6) d
  • Tc-99m — T1/2(99mTc ) : 6,0067 (10) h
  • F-18 — T1/2(18F ) : 1,82890 (23) h
  • Ga-67 — T1/2(67Ga ) : 3,2613 (5) d
  • Tl-201 — T1/2(201Tl ) : 3,0421 (17) d
  • I-125 — T1/2(125I ) : 59,388 (28) d
  • Se-75 — T1/2(75Se ) : 119,781 (24) d
  • P-32 — T1/2(32P ) : 14,273 (7) d
  • Sr-90 — T1/2(90Sr ) : 28,80 (7) a
  • H-3 — T1/2(3H ) : 12,312 (25) a
  • Na-22 — T1/2(22Na ) : 2,6029 (8) a
  • Cs-134 — T1/2(134Cs ) : 2,0644 (14) a
  • Eu-152 — T1/2(152Eu ) : 13,522 (16) a
  • Kr-85 — T1/2(85Kr ) : 10,752 (23) a
  • Ni-63 — T1/2(63Ni ) : 98,7 (24) a
  • C-14 — T1/2(14C ) : 5700 (30) a
  • Am-241 — T1/2(241Am ) : 432,6 (6) a
  • Pu-239 — T1/2(239Pu ) : 24100 (11) a
  • Ra-226 — T1/2(226Ra ) : 1600 (7) a
  • U-238 — T1/2(238U ) : 4,468 (5) 10^9 a

The comma is the decimal separator, the parenthesis carries the standard uncertainty on the last digits, and a is the year. Each sheet is at lnhb.fr/nuclides/<nuclide>_tables.pdf.

Source: BIPM Monographie-5, per-nuclide data sheets.

The year, which is two different years

DDEP quotes long half-lives in years, the data file carries seconds, and the calculator offers years as a time unit. A year is not one length: the Julian year of 365.25 days and the Gregorian mean year of 365.2425 days differ by 0.002%. That is small, but it is exactly the kind of difference that sits undetected in a chain of conversions, and it can be measured rather than assumed.

Take the nuclides where the two evaluations recommend the same number of years, so that no evaluation difference remains and only the conversion is left.

Nuclide Both evaluations Residual, Gregorian Residual, Julian
Am-241 432.6 a 8.25e-7 2.14e-5
Ra-226 1600 a 8.25e-7 2.14e-5
C-14 5700 a 8.25e-7 2.14e-5
U-238 4468000000 a 8.25e-7 2.14e-5

The Gregorian conversion leaves a residual at the rounding of the quoted digits; the Julian one leaves twenty times more. The seconds in the data therefore rest on the Gregorian mean year, and the calculator's own year input uses the same 365.2425 days. The two agree, which is the only thing that matters here — a tool whose year differed from its data's year would be wrong by 0.002% in a way no test of the arithmetic would ever reveal.

Worked cases

One per mode, and then some. The half-life is taken as given in these — it was the subject of the previous section, and mixing the two would leave any disagreement unattributable. What is checked here is that the arithmetic the tool performs on that half-life is the arithmetic the decay law calls for, end to end, including the secondary figure the screen prints alongside the answer.

Case Hand Tool Difference
Co-60, 37 GBq after 5 y D-W-01 · in GBq 1.91717419×10¹ 1.91717418959×10¹ 2.16×10⁻¹⁰
Tc-99m, 100 MBq after 24 h D-W-02 · in MBq 6.27080404×10⁰ 6.27080404003×10⁰ 4.58×10⁻¹²
Ir-192, 370 GBq after 90 d D-W-03 · in GBq 1.589410852×10² 1.58941085161×10² 2.43×10⁻¹⁰
Co-60, 37 → 1 GBq D-W-04 · in s 8.665623109×10⁸ 8.66562310867×10⁸ 3.78×10⁻¹¹
F-18, 1 → 0.001 GBq D-W-05 · in s 6.563664846×10⁴ 6.56366484556×10⁴ 6.64×10⁻¹¹
I-131, 1000 → 546.3 MBq over 7 d D-W-06 · in s 6.933913768×10⁵ 6.93391376791×10⁵ 1.29×10⁻¹¹

D-W-01 — Co-60

  1. T½(Co-60) = 1.66344192 × 10⁸ s from the data, checked against DDEP in the previous section.
  2. Five years at 365.2425 d is t = 5 × 3.1556952 × 10⁷ = 1.5778476 × 10⁸ s.
  3. t/T½ = 0.9485438482, so slightly less than one half-life has passed.
  4. A = 37 × 2^(−0.9485438482) GBq = 37 × 0.5181551864
  5. = 19.1717419 GBq, that is 51.81551864% of the original.

Why this case: A 1 Ci Co-60 source five years on — the case a radiation safety officer meets on every inventory.

D-W-02 — Tc-99m

  1. T½(Tc-99m) = 21625.92 s = 6.0072 h from the data.
  2. t = 24 h = 86400 s, so t/T½ = 3.995205753 half-lives.
  3. A = 100 × 2^(−3.995205753) MBq
  4. = 6.27080404 MBq. Just over a sixteenth is left, as four half-lives implies.

Why this case: A generator eluate left overnight. Four half-lives is the shape of a nuclear medicine day.

D-W-03 — Ir-192

  1. T½(Ir-192) = 6.3788256 × 10⁶ s = 73.829 d from the data.
  2. t = 90 d = 7.776 × 10⁶ s, so t/T½ = 1.219033172 half-lives.
  3. A = 370 × 2^(−1.219033172) GBq
  4. = 158.9410852 GBq, about 43% of the original.

Why this case: An industrial radiography source between exchanges, where the output drives the exposure time.

D-W-04 — Co-60

  1. The target ratio is 1/37 = 0.02702702703.
  2. t = −ln(0.02702702703) × T½ / ln2 = ln(37) × T½ / ln2.
  3. ln(37) = 3.610917913, and ln(37)/ln2 = 5.209453366 half-lives.
  4. t = 5.209453366 × 1.66344192 × 10⁸ s
  5. = 8.665623109 × 10⁸ s, that is 27.46026647 years.

Why this case: When does a source fall below a licence threshold — the question that decides a disposal date.

D-W-05 — F-18

  1. The target ratio is 10⁻³.
  2. t = ln(1000) × T½ / ln2, and ln(1000)/ln2 = log₂1000 = 9.965784285 half-lives.
  3. This is the decade rule three times over: three decades is 9.97 half-lives, not 10 exactly.
  4. t = 9.965784285 × 6586.2 s
  5. = 65636.64846 s, that is 18.23240235 hours.

Why this case: Waiting for a PET dose to fall a thousandfold before it leaves the controlled area.

D-W-06 — I-131

  1. The two-point form is T½ = ln2 · t / ln(A₀/A₁).
  2. A₀/A₁ = 1000/546.3 = 1.830496064, and ln of that is 0.6047068137.
  3. t = 7 d = 604800 s.
  4. T½ = 0.6931471806 × 604800 / 0.6047068137
  5. = 693391.3768 s, that is 8.025363157 d.
  6. The number of half-lives in the interval follows: 604800 / 693391.3768 = 0.8722346719.
  7. That figure can be checked against the reading it came from, which is the point of quoting it: 2^(−0.8722346719) = 0.5463, the measured ratio.
  8. The data value is 693377.28 s, so the recovered half-life is 0.002% above it — the agreement is limited by the four digits of the second reading, not by the method.

Why this case: Recovering a half-life from two counts a week apart — the check that catches a leaking or adsorbing source.

Required refusals

Some inputs have no answer. Not a large answer, not a small one — none. A calculator that produces a number there is worse than one that produces nothing, because the number will be written down.

AskedWhy there is no answerReturned
A target above the starting activity D-R-01 Decay never increases activity, so there is no time at which a pure source reaches a higher value. Ingrowth from a parent can do it, which is a different calculation and a different tool. NaN
A target of exactly zero D-R-02 Exponential decay never reaches zero. The honest answer is that there is no such time, not a very large number. NaN
A negative target D-R-03 Negative activity has no meaning. The input guard on the screen blocks it as well, but the engine must not answer if it is reached another way. NaN
Two readings that did not change D-R-04 If the activity did not fall, no half-life follows from the pair. Returning an enormous half-life would look like a legitimate long-lived answer. NaN
A second reading larger than the first D-R-05 Growth cannot come from decay. In practice this means a counting error, a geometry change or ingrowth — all worth knowing about, none of them a half-life. NaN
Two readings with no time between them D-R-06 Dividing by a zero interval would give an infinity that prints like a number. NaN

The number on the screen

The checks above exercise the engine. A separate check drives the published calculator in a browser, picks the nuclide, enters the values, presses the button and reads the figure the screen prints, comparing it with the hand calculation and allowing only the declared display rounding. It also reads the secondary line, because the number of half-lives elapsed is the figure a reader uses to sanity-check the answer, and a report that only looked at the headline would not have looked at it.

Coverage and result

CheckCountResult
Exact identities, each at 5 half-lives70pass
Half-lives against an independent evaluation24all within 3σ
Worked cases, answer and half-lives elapsed12pass
Required refusals6pass
Year convention, data against tool D-YR-014same year
Modes of the calculator covered3 of 3complete

Coverage of the nuclide list is deliberately not claimed. The calculator offers 147 nuclides and this report compares 24 of them, chosen because DDEP has evaluated them and because they are the ones that appear in practice. A complete comparison is not possible: DDEP has not evaluated every nuclide, and claiming otherwise would be the kind of overreach this report exists to avoid. What the sample establishes is that the pipeline carrying half-lives from the evaluation into the calculation does not distort them.

What this does not establish

Reporting a disagreement

A disagreement with a source you hold is worth sending — including a half-life, since the sample above is not the whole list. Contact details are on the contact page, the converter's report is at validation of the unit converter, and the method behind the rest of RadCalc is on the methods page.