Thermal expansion to 20 °C
Correct a length measured away from 20 °C to the ISO 1 reference temperature, or find the differential expansion between a unit under test and its standard (gauge block on a comparator, micrometer on a setting standard) with separate α and temperature for each. Returns the uncertainty rows for α and temperature, with sensitivity coefficients, ready for the uncertainty budget.
Thermal expansion · 20 °C reference
v0.1.0 · ISO 1 · GUM H.1| Input | Distribution | u (input unit) | c | |c|·u (mm) |
|---|---|---|---|---|
| Expansion coefficient α | normal, k = 1 | 0.00000115 1/K | -500 | 0.000575 |
| Temperature t | rectangular | 0.0577 °C | -0.00115 | 0.0000664 |
[ { "type": "B", "name": "Expansion coefficient α", "unit": "1/K", "distribution": "normal", "k": 1, "sensitivity": -499.97150162428244, "half_width": 0.00000115 }, { "type": "B", "name": "Temperature t", "unit": "°C", "distribution": "rectangular", "sensitivity": -0.0011499344537358495, "half_width": 0.1 } ]
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 |
|---|---|---|---|---|
| TEX-01 | length = 100, temperature = 25, alpha = 0.0000115, unit = mm, output = length20 | 99.994250330606 mm | ± 1e-11 | Hand-derived with exact rational arithmetic (Python fractions) from L₂₀ = L_t / (1 + α(t − 20)) (reference temperature 20 °C, ISO 1:2022). |
| TEX-02 | length = 100, temperature = 25, alpha = 0.0000115, unit = mm, output = linearized | 99.99425 mm | ± 1e-11 | Hand-derived with exact rational arithmetic (Python fractions) from L₂₀ = L_t / (1 + α(t − 20)) (reference temperature 20 °C, ISO 1:2022). |
| TEX-03 | length = 100, temperature = 25, alpha = 0.0000115, unit = mm, output = linearizationDifference | 3.3060599015556605e-7 mm | ± 1e-16 | Hand-derived with exact rational arithmetic (Python fractions) from L₂₀ = L_t / (1 + α(t − 20)) (reference temperature 20 °C, ISO 1:2022). |
| TEX-04 | length = 100, temperature = 25, alpha = 0.0000115, unit = mm, output = correction | -0.0057496693940098445 mm | ± 1e-14 | Hand-derived with exact rational arithmetic (Python fractions) from L₂₀ = L_t / (1 + α(t − 20)) (reference temperature 20 °C, ISO 1:2022). |
| TEX-05 | length = 50, temperature = 20, alpha = 0.0000115, output = length20 | 50 mm | ± 0 | Hand-derived with exact rational arithmetic (Python fractions) from L₂₀ = L_t / (1 + α(t − 20)) (reference temperature 20 °C, ISO 1:2022). |
| TEX-06 | length = 250, temperature = 18.5, alpha = 0.000023, unit = mm, output = length20 | 250.00862529757276 mm | ± 1e-11 | Hand-derived with exact rational arithmetic (Python fractions) from L₂₀ = L_t / (1 + α(t − 20)) (reference temperature 20 °C, ISO 1:2022). |
| TEX-07 | length = 100, temperature = 25, alpha = 0.0000115, unit = mm, output = row:alpha:sensitivity | -499.9425049589948 mm·K | ± 1e-10 | Hand-derived with exact rational arithmetic (Python fractions) from L₂₀ = L_t / (1 + α(t − 20)) (reference temperature 20 °C, ISO 1:2022). |
| TEX-08 | length = 100, temperature = 25, alpha = 0.0000115, unit = mm, output = row:alpha:contribution | 0.000574933880702844 mm | ± 1e-15 | Hand-derived with exact rational arithmetic (Python fractions) from L₂₀ = L_t / (1 + α(t − 20)) (reference temperature 20 °C, ISO 1:2022). u(α) is the 10 % default, a Metrology Bench convention; see the tool notes. |
| TEX-09 | length = 100, temperature = 25, alpha = 0.0000115, unit = mm, uTemperature = {"distribution":"rectangular","halfWidth":0.1}, output = row:t:contribution | 0.00006638764615800464 mm | ± 1e-15 | Hand-derived with exact rational arithmetic (Python fractions) from L₂₀ = L_t / (1 + α(t − 20)) (reference temperature 20 °C, ISO 1:2022). |
| TEX-10 | length = 25, unit = mm, uut = {"alpha":0.0000108,"temperature":21}, standard = {"alpha":0.0000115,"temperature":22}, standardLength = 25, reading = 0.0015, output = correction | -0.000305 mm | ± 1e-15 | Hand-derived with exact rational arithmetic from the JCGM 100:2008 H.1 comparison model Δ = L(α_x(t_x − 20) − α_s(t_s − 20)), L_x = L_s + d − Δ. |
| TEX-11 | length = 25, unit = mm, uut = {"alpha":0.0000108,"temperature":21}, standard = {"alpha":0.0000115,"temperature":22}, standardLength = 25, reading = 0.0015, output = uutLength20 | 25.001805 mm | ± 1e-12 | Hand-derived with exact rational arithmetic from the JCGM 100:2008 H.1 comparison model Δ = L(α_x(t_x − 20) − α_s(t_s − 20)), L_x = L_s + d − Δ. |
| TEX-12 | length = 25, unit = mm, uut = {"alpha":0.0000108,"temperature":21}, standard = {"alpha":0.0000115,"temperature":22,"uTemperature":{"distribution":"rectangular","halfWidth":0.2}}, standardLength = 25, reading = 0.0015, output = row:t_s:sensitivity | 0.0002875 mm/K | ± 1e-17 | Hand-derived with exact rational arithmetic from the JCGM 100:2008 H.1 comparison model Δ = L(α_x(t_x − 20) − α_s(t_s − 20)), L_x = L_s + d − Δ. |
| TEX-13 | length = 25, unit = mm, uut = {"alpha":0.0000108,"temperature":21}, standard = {"alpha":0.0000115,"temperature":22}, standardLength = 25, reading = 0.0015, output = row:alpha_x:sensitivity | -25 mm·K | ± 1e-12 | Hand-derived with exact rational arithmetic from the JCGM 100:2008 H.1 comparison model Δ = L(α_x(t_x − 20) − α_s(t_s − 20)), L_x = L_s + d − Δ. |
| TEX-H1-01 | length = 50000000, unit = nm, model = difference, uut = {"alpha":0.0000115,"temperature":19.9,"uTemperature":{"distribution":"normal","halfWidth":0.406201920232,"k":1}}, standard = {"alpha":0.0000115,"temperature":19.9,"uAlpha":{"distribution":"rectangular","halfWidth":0.000002}}, uDeltaAlpha = {"distribution":"rectangular","halfWidth":0.000001,"dof":50}, uDeltaT = {"distribution":"rectangular","halfWidth":0.05,"dof":2}, output = row:delta_t:contribution | 16.5988202392 nm | ± 1e-9 | JCGM 100:2008 Annex H.1 end-gauge example (inputs as transcribed in MSL GTC examples/GUM_H1.py); expected value computed independently by GTC (github.com/MSLNZ/GTC, test/test_uncertain_real_dof.py, GuideExampleH1, commit 1c165fc). Checked against the printed JCGM 100:2008 H.1 values (Table H.1, H.1.3, H.1.6) on 2026-10-28. |
| TEX-H1-02 | length = 50000000, unit = nm, model = difference, uut = {"alpha":0.0000115,"temperature":19.9,"uTemperature":{"distribution":"normal","halfWidth":0.406201920232,"k":1}}, standard = {"alpha":0.0000115,"temperature":19.9,"uAlpha":{"distribution":"rectangular","halfWidth":0.000002}}, uDeltaAlpha = {"distribution":"rectangular","halfWidth":0.000001,"dof":50}, uDeltaT = {"distribution":"rectangular","halfWidth":0.05,"dof":2}, output = row:delta_alpha:contribution | 2.88675134595 nm | ± 1e-9 | JCGM 100:2008 Annex H.1 end-gauge example (inputs as transcribed in MSL GTC examples/GUM_H1.py); expected value computed independently by GTC (github.com/MSLNZ/GTC, test/test_uncertain_real_dof.py, GuideExampleH1, commit 1c165fc). Checked against the printed JCGM 100:2008 H.1 values (Table H.1, H.1.3, H.1.6) on 2026-10-28. |
| TEX-H1-03 | length = 50000000, unit = nm, model = difference, uut = {"alpha":0.0000115,"temperature":19.9,"uTemperature":{"distribution":"normal","halfWidth":0.406201920232,"k":1}}, standard = {"alpha":0.0000115,"temperature":19.9,"uAlpha":{"distribution":"rectangular","halfWidth":0.000002}}, uDeltaAlpha = {"distribution":"rectangular","halfWidth":0.000001,"dof":50}, uDeltaT = {"distribution":"rectangular","halfWidth":0.05,"dof":2}, output = row:alpha_s:contribution | 0 nm | ± 0 | JCGM 100:2008 Annex H.1 end-gauge example (inputs as transcribed in MSL GTC examples/GUM_H1.py); expected value computed independently by GTC (github.com/MSLNZ/GTC, test/test_uncertain_real_dof.py, GuideExampleH1, commit 1c165fc). Checked against the printed JCGM 100:2008 H.1 values (Table H.1, H.1.3, H.1.6) on 2026-10-28. |
| TEX-H1-04 | length = 50000000, unit = nm, model = difference, uut = {"alpha":0.0000115,"temperature":19.9,"uTemperature":{"distribution":"normal","halfWidth":0.406201920232,"k":1}}, standard = {"alpha":0.0000115,"temperature":19.9,"uAlpha":{"distribution":"rectangular","halfWidth":0.000002}}, uDeltaAlpha = {"distribution":"rectangular","halfWidth":0.000001,"dof":50}, uDeltaT = {"distribution":"rectangular","halfWidth":0.05,"dof":2}, extraRows = 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, output = u_c | 31.6637674111 nm | ± 1e-8 | JCGM 100:2008 Annex H.1 end-gauge example (inputs as transcribed in MSL GTC examples/GUM_H1.py); expected value computed independently by GTC (github.com/MSLNZ/GTC, test/test_uncertain_real_dof.py, GuideExampleH1, commit 1c165fc). Checked against the printed JCGM 100:2008 H.1 values (Table H.1, H.1.3, H.1.6) on 2026-10-28. |
| TEX-H1-05 | length = 50000000, unit = nm, model = difference, uut = {"alpha":0.0000115,"temperature":19.9,"uTemperature":{"distribution":"normal","halfWidth":0.406201920232,"k":1}}, standard = {"alpha":0.0000115,"temperature":19.9,"uAlpha":{"distribution":"rectangular","halfWidth":0.000002}}, uDeltaAlpha = {"distribution":"rectangular","halfWidth":0.000001,"dof":50}, uDeltaT = {"distribution":"rectangular","halfWidth":0.05,"dof":2}, extraRows = 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, output = nu_eff | 16.7521475092 | ± 1e-7 | JCGM 100:2008 Annex H.1 end-gauge example (inputs as transcribed in MSL GTC examples/GUM_H1.py); expected value computed independently by GTC (github.com/MSLNZ/GTC, test/test_uncertain_real_dof.py, GuideExampleH1, commit 1c165fc). Checked against the printed JCGM 100:2008 H.1 values (Table H.1, H.1.3, H.1.6) on 2026-10-28. |
| TEX-RT-01 | length20 = 100, alpha = 0.0000115, temperature = 27.3 | 100 mm | ± 1e-12 | Round trip: L₂₀ → L_t = L₂₀(1 + αθ) → L₂₀ = L_t/(1 + αθ). Exact inverse pair, so only floating point separates the result from the start. |
| TEX-RT-02 | length20 = 1000, alpha = 0.0000012, temperature = 4.5 | 1000 mm | ± 1e-11 | Round trip: L₂₀ → L_t = L₂₀(1 + αθ) → L₂₀ = L_t/(1 + αθ). |
| TEX-R-01 | length = 100, temperature = 41, alpha = 0.0000115, output = length20 | OutOfRangeError | exact | Metrology Bench limit 0 to 40 °C: a constant, room-temperature α (as presets and handbooks give) is a reasonable model only near 20 °C. ISO 1:2022 sets 20 °C as the reference. |
| TEX-R-02 | length = 100, temperature = -5, alpha = 0.0000115, output = length20 | OutOfRangeError | exact | Metrology Bench limit 0 to 40 °C (see TEX-R-01). |
| TEX-R-03 | length = 100, temperature = 25, alpha = 11.5, output = length20 | OutOfRangeError | exact | Metrology Bench limit |α| ≤ 1e-3 /K: no solid used for length work expands that much; a larger value is a unit slip. |
| TEX-R-04 | length = 50, model = difference, uut = {"alpha":0.0000115,"temperature":20.1}, standard = {"alpha":0.0000115,"temperature":20}, output = correction | RangeError | exact | JCGM 100:2008 H.1: the difference model takes u(δα) and u(δθ) as inputs; without them there is nothing to evaluate. |
| TEX-R-05 | length = 0, temperature = 25, alpha = 0.0000115, output = length20 | RangeError | exact | A length must be greater than zero. |
Put this calculator on your site
Free for labs, schools and anyone else. Paste this into your page.
<iframe src="https://metrologybench.com/embed/thermal-expansion" title="Thermal expansion to 20 °C · Metrology Bench" width="100%" height="1100" 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.