Uncertainty budget (GUM)
Build a bench uncertainty budget row by row: Type A from your readings, Type B from limits or a certificate with a rectangular, triangular, U-shaped or normal distribution. Combines by root sum of squares, finds ν_eff by Welch–Satterthwaite and k from the Student t distribution, and shows every row’s share.
Uncertainty budget · GUM
v0.1.0 · RSS, Welch–Satterthwaite, Student tExpanded uncertainty U (p = 95.45 %)0.02597 mVu_c = 0.01258 mV · ν_eff = 40.11 · k = 2.064
| Source | Type | Divisor | u (input unit) | c | |c|·u (mV) | % of u_c² | ν |
|---|---|---|---|---|---|---|---|
| Repeatability | A (n = 5) | √n | 0.007071 mV | 1.000 | 0.007071 | 31.6 | 4.000 |
| Reference certificate | B · normal | k = 2 | 0.01000 mV | 1.000 | 0.01000 | 63.2 | ∞ |
| Resolution | B · rectangular | √3 | 0.002887 mV | 1.000 | 0.002887 | 5.3 | ∞ |
u_c = √Σ(cᵢuᵢ)² · ν_eff = u_c⁴ / Σ((cᵢuᵢ)⁴/νᵢ) · U = k·u_c, k from Student t at ν_effInputs are treated as uncorrelated. Round U for a certificate separately (at most two significant figures).
Test vectors for this tool
The reference cases this calculator is tested against on every change. Use them to check your own software. All test vectors · Download JSON
| ID | Inputs | Expected | Tolerance | Source |
|---|---|---|---|---|
| UNC-K-01 | p = 0.95, dof = 1 | 12.706204736174694 | ± 1e-9 | Hand-derived closed form: k = tan(πp/2) for ν = 1 (Cauchy). Cross-checked: SciPy 1.18.1 scipy.stats.t.ppf |
| UNC-K-02 | p = 0.9545, dof = 2 | 4.526550760081992 | ± 1e-9 | Hand-derived closed form: k = p√2/√(1 − p²) for ν = 2. Cross-checked: SciPy 1.18.1 scipy.stats.t.ppf |
| UNC-K-03 | p = 0.95, dof = 10 | 2.228138851986274 | ± 1e-9 | SciPy 1.18.1 scipy.stats.t.ppf((1 + p)/2, dof); agrees with mpmath 1.4.1 at 40 digits and GTC 1.5.1 reporting.k_factor |
| UNC-K-04 | p = 0.99, dof = 16 | 2.9207816224251 | ± 1e-9 | SciPy 1.18.1 scipy.stats.t.ppf((1 + p)/2, dof); agrees with mpmath 1.4.1 at 40 digits and GTC 1.5.1 reporting.k_factor |
| UNC-K-05 | p = 0.9545 | 2.0000024438996027 | ± 1e-9 | SciPy 1.18.1 scipy.stats.norm.ppf((1 + p)/2); agrees with mpmath 1.4.1 at 40 digits and GTC 1.5.1 reporting.k_factor |
| UNC-K-06 | p = 0.95 | 1.959963984540054 | ± 1e-9 | SciPy 1.18.1 scipy.stats.norm.ppf((1 + p)/2); agrees with mpmath 1.4.1 at 40 digits and GTC 1.5.1 reporting.k_factor |
| UNC-K-07 | p = 0.9545, dof = 16.3 | 2.165590984821532 | ± 1e-9 | SciPy 1.18.1 scipy.stats.t.ppf((1 + p)/2, dof); agrees with mpmath 1.4.1 at 40 digits and GTC 1.5.1 reporting.k_factor |
| UNC-K-08 | p = 0.95, dof = 1000000 | 1.959966356814107 | ± 1e-9 | SciPy 1.18.1 scipy.stats.t.ppf((1 + p)/2, dof); agrees with mpmath 1.4.1 at 40 digits |
| UNC-K-09 | p = 0.99999, dof = 10 | OutOfRangeError | exact | Supported coverage probability is 0.5 to 0.9999 |
| UNC-K-10 | p = 0.4 | OutOfRangeError | exact | Supported coverage probability is 0.5 to 0.9999 |
| UNC-B1-01 | rows = A[10.1 10.3 10.2 10.4 10]; B rectangular a = 0.3; B triangular a = 0.6; B u-shaped a = 0.2; B normal U = 0.2 k = 2, coverageProbability = 0.9545, output = u_c | 0.3535533905932738 mm | ± 1e-9 | Hand-derived: u² = 0.025/5 + 0.3²/3 + 0.6²/6 + 0.2²/2 + (0.2/2)² = 0.125, u_c = √0.125. Cross-checked with GTC 1.5.1 |
| UNC-B1-02 | rows = A[10.1 10.3 10.2 10.4 10]; B rectangular a = 0.3; B triangular a = 0.6; B u-shaped a = 0.2; B normal U = 0.2 k = 2, coverageProbability = 0.9545, output = nu_eff | 2500 | ± 2.5e-7 | Hand-derived: ν_eff = 0.125² / (0.005²/4) = 2500. Cross-checked with GTC 1.5.1 |
| UNC-B1-03 | rows = A[10.1 10.3 10.2 10.4 10]; B rectangular a = 0.3; B triangular a = 0.6; B u-shaped a = 0.2; B normal U = 0.2 k = 2, coverageProbability = 0.9545, output = k | 2.0010029372621485 | ± 1e-9 | SciPy 1.18.1 scipy.stats.t.ppf((1 + p)/2, ν) at the GTC df |
| UNC-B1-04 | rows = A[10.1 10.3 10.2 10.4 10]; B rectangular a = 0.3; B triangular a = 0.6; B u-shaped a = 0.2; B normal U = 0.2 k = 2, coverageProbability = 0.9545, output = U | 0.7074613730561325 mm | ± 1e-9 | k·u_c with u_c from GTC 1.5.1 and k from SciPy 1.18.1 |
| UNC-B2-01 | rows = B normal U = 0.2 k = 2, c = 3; B triangular a = 0.6, c = -0.5; B rectangular a = 0.3, c = 2, coverageProbability = 0.95, output = u_c | 0.4743416490252569 V | ± 1e-9 | Hand-derived: (3·0.1)² + (0.5·0.6/√6)² + (2·0.3/√3)² = 0.09 + 0.015 + 0.12 = 0.225, u_c = √0.225. Cross-checked with GTC 1.5.1 |
| UNC-B2-02 | rows = B normal U = 0.2 k = 2, c = 3; B triangular a = 0.6, c = -0.5; B rectangular a = 0.3, c = 2, coverageProbability = 0.95, output = nu_eff | Infinity | exact | Hand-derived: every ν is infinite, so ν_eff is infinite. Cross-checked with GTC 1.5.1 |
| UNC-B2-03 | rows = B normal U = 0.2 k = 2, c = 3; B triangular a = 0.6, c = -0.5; B rectangular a = 0.3, c = 2, coverageProbability = 0.95, output = k | 1.959963984540054 | ± 1e-9 | SciPy 1.18.1 scipy.stats.t.ppf((1 + p)/2, ν) at the GTC df |
| UNC-B2-04 | rows = B normal U = 0.2 k = 2, c = 3; B triangular a = 0.6, c = -0.5; B rectangular a = 0.3, c = 2, coverageProbability = 0.95, output = U | 0.9296925484568423 V | ± 1e-9 | k·u_c with u_c from GTC 1.5.1 and k from SciPy 1.18.1 |
| UNC-B3-01 | rows = B normal U = 1 k = 1, ν = 4; B normal U = 1 k = 1, ν = 4, coverageProbability = 0.95, output = u_c | 1.4142135623730951 Ω | ± 1e-9 | Hand-derived: u_c = √(1² + 1²) = √2. Cross-checked with GTC 1.5.1 |
| UNC-B3-02 | rows = B normal U = 1 k = 1, ν = 4; B normal U = 1 k = 1, ν = 4, coverageProbability = 0.95, output = nu_eff | 8 | ± 1e-9 | Hand-derived: ν_eff = 2² / (1/4 + 1/4) = 8. Cross-checked with GTC 1.5.1 |
| UNC-B3-03 | rows = B normal U = 1 k = 1, ν = 4; B normal U = 1 k = 1, ν = 4, coverageProbability = 0.95, output = k | 2.306004135204166 | ± 1e-9 | SciPy 1.18.1 scipy.stats.t.ppf((1 + p)/2, ν) at the GTC df |
| UNC-B3-04 | rows = B normal U = 1 k = 1, ν = 4; B normal U = 1 k = 1, ν = 4, coverageProbability = 0.95, output = U | 3.2611823228941716 Ω | ± 1e-9 | k·u_c with u_c from GTC 1.5.1 and k from SciPy 1.18.1 |
| UNC-B4-01 | rows = B normal U = 1 k = 1, ν = 3; B normal U = 1 k = 1, ν = 5, coverageProbability = 0.95, output = nu_eff | 7.5 | ± 1e-9 | Hand-derived: ν_eff = 2² / (1/3 + 1/5) = 7.5. Cross-checked with GTC 1.5.1 |
| UNC-B4-02 | rows = B normal U = 1 k = 1, ν = 3; B normal U = 1 k = 1, ν = 5, coverageProbability = 0.95, output = k | 2.333039626864974 | ± 1e-9 | SciPy 1.18.1 scipy.stats.t.ppf((1 + p)/2, ν) at the GTC df |
| UNC-B5-01 | rows = B normal U = 1 k = 1, ν = 3; B normal U = 1 k = 1, ν = 5, coverageProbability = 0.95, output = k, truncateDof = true | 2.364624251592784 | ± 1e-9 | SciPy 1.18.1 scipy.stats.t.ppf((1 + p)/2, ν truncated to an integer) at the GTC df |
| UNC-B6-01 | rows = A[1 2 3 4], coverageProbability = 0.95, output = u_c | 0.6454972243679028 g | ± 1e-9 | Hand-derived: s = √(5/3), u = s/√4. Cross-checked with GTC 1.5.1 |
| UNC-B6-02 | rows = A[1 2 3 4], coverageProbability = 0.95, output = nu_eff | 3 | ± 1e-9 | Hand-derived: ν = n − 1 = 3. Cross-checked with GTC 1.5.1 |
| UNC-B6-03 | rows = A[1 2 3 4], coverageProbability = 0.95, output = k | 3.182446305283708 | ± 1e-9 | SciPy 1.18.1 scipy.stats.t.ppf((1 + p)/2, ν) at the GTC df |
| UNC-B6-04 | rows = A[1 2 3 4], coverageProbability = 0.95, output = U | 2.0542602567605206 g | ± 1e-9 | k·u_c with u_c from GTC 1.5.1 and k from SciPy 1.18.1 |
| UNC-H1-01 | rows = B normal U = 25 k = 1, ν = 18; B normal U = 5.8 k = 1, ν = 24; B normal U = 3.9 k = 1, ν = 5; B normal U = 6.7 k = 1, ν = 8; B rectangular a = 0.000002, c = 0; B rectangular a = 0.000001, ν = 50, c = 5000062.3; B rectangular a = 0.05, ν = 2, c = -575.0071645; B normal U = 0.2 k = 1, c = 0; B u-shaped a = 0.5, c = 0, coverageProbability = 0.99, output = u_c | 31.663879111008633 nm | ± 3.1663879111008635e-9 | GTC 1.5.1: sum of cᵢ·xᵢ as GTC uncertain numbers (type_a.estimate for readings; type_b.uniform, triangular, arcsine for Type B), giving u and df (model: JCGM 100:2008 Annex H.1 end-gauge calibration as coded in GTC examples/GUM_H1.py) |
| UNC-H1-02 | rows = B normal U = 25 k = 1, ν = 18; B normal U = 5.8 k = 1, ν = 24; B normal U = 3.9 k = 1, ν = 5; B normal U = 6.7 k = 1, ν = 8; B rectangular a = 0.000002, c = 0; B rectangular a = 0.000001, ν = 50, c = 5000062.3; B rectangular a = 0.05, ν = 2, c = -575.0071645; B normal U = 0.2 k = 1, c = 0; B u-shaped a = 0.5, c = 0, coverageProbability = 0.99, output = nu_eff | 16.751855737627242 | ± 1.675185573762724e-9 | GTC 1.5.1: sum of cᵢ·xᵢ as GTC uncertain numbers (type_a.estimate for readings; type_b.uniform, triangular, arcsine for Type B), giving u and df (model: JCGM 100:2008 Annex H.1 end-gauge calibration as coded in GTC examples/GUM_H1.py) |
| UNC-H1-03 | rows = B normal U = 25 k = 1, ν = 18; B normal U = 5.8 k = 1, ν = 24; B normal U = 3.9 k = 1, ν = 5; B normal U = 6.7 k = 1, ν = 8; B rectangular a = 0.000002, c = 0; B rectangular a = 0.000001, ν = 50, c = 5000062.3; B rectangular a = 0.05, ν = 2, c = -575.0071645; B normal U = 0.2 k = 1, c = 0; B u-shaped a = 0.5, c = 0, coverageProbability = 0.99, output = k | 2.9035476304491388 | ± 1e-9 | SciPy 1.18.1 scipy.stats.t.ppf((1 + p)/2, ν) at the GTC df (model: JCGM 100:2008 Annex H.1 end-gauge calibration as coded in GTC examples/GUM_H1.py) |
| UNC-H1-04 | rows = B normal U = 25 k = 1, ν = 18; B normal U = 5.8 k = 1, ν = 24; B normal U = 3.9 k = 1, ν = 5; B normal U = 6.7 k = 1, ν = 8; B rectangular a = 0.000002, c = 0; B rectangular a = 0.000001, ν = 50, c = 5000062.3; B rectangular a = 0.05, ν = 2, c = -575.0071645; B normal U = 0.2 k = 1, c = 0; B u-shaped a = 0.5, c = 0, coverageProbability = 0.99, output = U | 91.9375811635971 nm | ± 9.19375811635971e-9 | k·u_c with u_c from GTC 1.5.1 and k from SciPy 1.18.1 (model: JCGM 100:2008 Annex H.1 end-gauge calibration as coded in GTC examples/GUM_H1.py) |
| UNC-H2-01 | rows = B normal U = 25 k = 1, ν = 18; B normal U = 5.8 k = 1, ν = 24; B normal U = 3.9 k = 1, ν = 5; B normal U = 6.7 k = 1, ν = 8; B rectangular a = 0.000002, c = 0; B rectangular a = 0.000001, ν = 50, c = 5000062.3; B rectangular a = 0.05, ν = 2, c = -575.0071645; B normal U = 0.2 k = 1, c = 0; B u-shaped a = 0.5, c = 0, coverageProbability = 0.99, output = k, truncateDof = true | 2.9207816224251 | ± 1e-9 | SciPy 1.18.1 scipy.stats.t.ppf((1 + p)/2, ν truncated to an integer) at the GTC df (model: JCGM 100:2008 Annex H.1 end-gauge calibration as coded in GTC examples/GUM_H1.py) |
| UNC-H2-02 | rows = B normal U = 25 k = 1, ν = 18; B normal U = 5.8 k = 1, ν = 24; B normal U = 3.9 k = 1, ν = 5; B normal U = 6.7 k = 1, ν = 8; B rectangular a = 0.000002, c = 0; B rectangular a = 0.000001, ν = 50, c = 5000062.3; B rectangular a = 0.05, ν = 2, c = -575.0071645; B normal U = 0.2 k = 1, c = 0; B u-shaped a = 0.5, c = 0, coverageProbability = 0.99, output = U, truncateDof = true | 92.48327620212405 nm | ± 9.248327620212404e-9 | k·u_c with u_c from GTC 1.5.1 and k from SciPy 1.18.1 (model: JCGM 100:2008 Annex H.1 end-gauge calibration as coded in GTC examples/GUM_H1.py) |
| UNC-B7-01 | rows = B normal U = 1 k = 1, ν = 4; B normal U = 1 k = 1, ν = 4, coverageProbability = 1, output = U | OutOfRangeError | exact | Supported coverage probability is 0.5 to 0.9999 |
Put this calculator on your site
Free for labs, schools and anyone else. Paste this into your page.
<iframe src="https://metrologybench.com/embed/uncertainty-budget" title="Uncertainty budget (GUM) · Metrology Bench" width="100%" height="2150" style="border:0;max-width:640px" loading="lazy"></iframe>
Ask your AI
Connect metrology-toolbox-mcp and your assistant runs this exact calculation, with the source in the answer.