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 t
Row 1 · Type A · Repeatability
Row 2 · Type B · Reference certificate
Row 3 · Type B · Resolution
Expanded uncertainty U (p = 95.45 %)0.02597 mVu_c = 0.01258 mV · ν_eff = 40.11 · k = 2.064
Uncertainty budget
SourceTypeDivisoru (input unit)c|c|·u (mV)% of u_c²ν
RepeatabilityA (n = 5)√n0.007071 mV1.0000.00707131.64.000
Reference certificateB · normalk = 20.01000 mV1.0000.0100063.2∞
ResolutionB · rectangular√30.002887 mV1.0000.0028875.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).
Display rounding

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

IDInputsExpectedToleranceSource
UNC-K-01p = 0.95, dof = 112.706204736174694 ± 1e-9Hand-derived closed form: k = tan(πp/2) for ν = 1 (Cauchy). Cross-checked: SciPy 1.18.1 scipy.stats.t.ppf
UNC-K-02p = 0.9545, dof = 24.526550760081992 ± 1e-9Hand-derived closed form: k = p√2/√(1 − p²) for ν = 2. Cross-checked: SciPy 1.18.1 scipy.stats.t.ppf
UNC-K-03p = 0.95, dof = 102.228138851986274 ± 1e-9SciPy 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-04p = 0.99, dof = 162.9207816224251 ± 1e-9SciPy 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-05p = 0.95452.0000024438996027 ± 1e-9SciPy 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-06p = 0.951.959963984540054 ± 1e-9SciPy 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-07p = 0.9545, dof = 16.32.165590984821532 ± 1e-9SciPy 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-08p = 0.95, dof = 10000001.959966356814107 ± 1e-9SciPy 1.18.1 scipy.stats.t.ppf((1 + p)/2, dof); agrees with mpmath 1.4.1 at 40 digits
UNC-K-09p = 0.99999, dof = 10OutOfRangeError exactSupported coverage probability is 0.5 to 0.9999
UNC-K-10p = 0.4OutOfRangeError exactSupported coverage probability is 0.5 to 0.9999
UNC-B1-01rows = 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_c0.3535533905932738 mm± 1e-9Hand-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-02rows = 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_eff2500 ± 2.5e-7Hand-derived: ν_eff = 0.125² / (0.005²/4) = 2500. Cross-checked with GTC 1.5.1
UNC-B1-03rows = 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 = k2.0010029372621485 ± 1e-9SciPy 1.18.1 scipy.stats.t.ppf((1 + p)/2, ν) at the GTC df
UNC-B1-04rows = 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 = U0.7074613730561325 mm± 1e-9k·u_c with u_c from GTC 1.5.1 and k from SciPy 1.18.1
UNC-B2-01rows = 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_c0.4743416490252569 V± 1e-9Hand-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-02rows = 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_effInfinity exactHand-derived: every ν is infinite, so ν_eff is infinite. Cross-checked with GTC 1.5.1
UNC-B2-03rows = 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 = k1.959963984540054 ± 1e-9SciPy 1.18.1 scipy.stats.t.ppf((1 + p)/2, ν) at the GTC df
UNC-B2-04rows = 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 = U0.9296925484568423 V± 1e-9k·u_c with u_c from GTC 1.5.1 and k from SciPy 1.18.1
UNC-B3-01rows = B normal U = 1 k = 1, ν = 4; B normal U = 1 k = 1, ν = 4, coverageProbability = 0.95, output = u_c1.4142135623730951 Ω± 1e-9Hand-derived: u_c = √(1² + 1²) = √2. Cross-checked with GTC 1.5.1
UNC-B3-02rows = B normal U = 1 k = 1, ν = 4; B normal U = 1 k = 1, ν = 4, coverageProbability = 0.95, output = nu_eff8 ± 1e-9Hand-derived: ν_eff = 2² / (1/4 + 1/4) = 8. Cross-checked with GTC 1.5.1
UNC-B3-03rows = B normal U = 1 k = 1, ν = 4; B normal U = 1 k = 1, ν = 4, coverageProbability = 0.95, output = k2.306004135204166 ± 1e-9SciPy 1.18.1 scipy.stats.t.ppf((1 + p)/2, ν) at the GTC df
UNC-B3-04rows = B normal U = 1 k = 1, ν = 4; B normal U = 1 k = 1, ν = 4, coverageProbability = 0.95, output = U3.2611823228941716 Ω± 1e-9k·u_c with u_c from GTC 1.5.1 and k from SciPy 1.18.1
UNC-B4-01rows = B normal U = 1 k = 1, ν = 3; B normal U = 1 k = 1, ν = 5, coverageProbability = 0.95, output = nu_eff7.5 ± 1e-9Hand-derived: ν_eff = 2² / (1/3 + 1/5) = 7.5. Cross-checked with GTC 1.5.1
UNC-B4-02rows = B normal U = 1 k = 1, ν = 3; B normal U = 1 k = 1, ν = 5, coverageProbability = 0.95, output = k2.333039626864974 ± 1e-9SciPy 1.18.1 scipy.stats.t.ppf((1 + p)/2, ν) at the GTC df
UNC-B5-01rows = B normal U = 1 k = 1, ν = 3; B normal U = 1 k = 1, ν = 5, coverageProbability = 0.95, output = k, truncateDof = true2.364624251592784 ± 1e-9SciPy 1.18.1 scipy.stats.t.ppf((1 + p)/2, ν truncated to an integer) at the GTC df
UNC-B6-01rows = A[1 2 3 4], coverageProbability = 0.95, output = u_c0.6454972243679028 g± 1e-9Hand-derived: s = √(5/3), u = s/√4. Cross-checked with GTC 1.5.1
UNC-B6-02rows = A[1 2 3 4], coverageProbability = 0.95, output = nu_eff3 ± 1e-9Hand-derived: ν = n − 1 = 3. Cross-checked with GTC 1.5.1
UNC-B6-03rows = A[1 2 3 4], coverageProbability = 0.95, output = k3.182446305283708 ± 1e-9SciPy 1.18.1 scipy.stats.t.ppf((1 + p)/2, ν) at the GTC df
UNC-B6-04rows = A[1 2 3 4], coverageProbability = 0.95, output = U2.0542602567605206 g± 1e-9k·u_c with u_c from GTC 1.5.1 and k from SciPy 1.18.1
UNC-H1-01rows = 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_c31.663879111008633 nm± 3.1663879111008635e-9GTC 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-02rows = 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_eff16.751855737627242 ± 1.675185573762724e-9GTC 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-03rows = 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 = k2.9035476304491388 ± 1e-9SciPy 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-04rows = 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 = U91.9375811635971 nm± 9.19375811635971e-9k·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-01rows = 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 = true2.9207816224251 ± 1e-9SciPy 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-02rows = 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 = true92.48327620212405 nm± 9.248327620212404e-9k·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-01rows = B normal U = 1 k = 1, ν = 4; B normal U = 1 k = 1, ν = 4, coverageProbability = 1, output = UOutOfRangeError exactSupported 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>

Preview the embed

Ask your AI

Connect metrology-toolbox-mcp and your assistant runs this exact calculation, with the source in the answer.

Set it up