Tolerance stack-up example: worst case vs RSS, step by step
A tolerance stack-up answers one question: given the tolerance on every part, what range can a gap or overlap in the assembly take? The example below goes from the loop diagram to the answer three ways: worst case, root sum square (RSS) and RSS inflated by Bender's 1.5 factor. The same six-part stack gives three different verdicts. Every number on this page is computed at build time by the engine behind the tolerance stack-up calculator, so you can open the example there and change it.
The assembly
A 20 mm shaft carries a 6204 deep groove ball bearing, a spacer, a spur gear and a thrust washer, all pushed against a shoulder and retained by a DIN 471 circlip. The requirement is the axial end float between the washer and the circlip. It must be at least 0.100 mm so the circlip always seats in its groove, and at most 0.500 mm so the gear mesh stays in line. Units are mm throughout.
| Ref | Dimension | Drawing | Sign | Source of tolerance |
|---|---|---|---|---|
| A | Shaft, shoulder to circlip groove wall | 41.900 +0.100 / -0.000 | + | Drawing, turned feature |
| B | Bearing 6204 inner ring width | 14.000 +0.000 / -0.120 | - | ISO 492:2023 Normal class, d 18 to 30 mm |
| C | Spacer | 8.000 ± 0.050 | - | Drawing, ground faces |
| D | Gear hub width | 18.000 ± 0.050 | - | Drawing, faced both sides |
| E | Thrust washer | 0.500 ± 0.020 | - | Purchased shim |
| F | Circlip DIN 471, 20 mm shaft | 1.200 +0.000 / -0.060 | - | DIN 471 thickness s, h11 |
Step 1: draw the loop
Start on one face of the gap and walk through touching parts, one dimension per part, until you arrive at the other face. Here the loop starts at the circlip face and runs along the circlip thickness to the groove wall. It continues along the shaft to the shoulder, then back out through the bearing, spacer, hub and washer to the other face of the gap. Take the direction that opens the gap as positive: the shaft dimension A is positive, and every part packed into that length (B to F) is negative. This convention is from Fischer (2011); any consistent one works.
Step 2: convert every tolerance to equal bilateral
Three of the six tolerances are unilateral. Before adding anything, rewrite each as a mean and a symmetric half width:
where xi is the drawing nominal and T+,i, T-,i the plus and minus tolerances. Skipping this step is the most common way to get the wrong nominal gap. From the drawing nominals the gap is 0.200 mm; from the means it is 0.340 mm, a difference of 0.140 mm that a worst case on the drawing values would miss.
| Ref | Sign | Mean | Half width | Half width² | σ (k = 3) |
|---|---|---|---|---|---|
| A | + | 41.950 | 0.050 | 0.0025 | 0.0167 |
| B | - | 13.940 | 0.060 | 0.0036 | 0.0200 |
| C | - | 8.000 | 0.050 | 0.0025 | 0.0167 |
| D | - | 18.000 | 0.050 | 0.0025 | 0.0167 |
| E | - | 0.500 | 0.020 | 0.0004 | 0.0067 |
| F | - | 1.170 | 0.030 | 0.0009 | 0.0100 |
| Sum | 0.340 (signed) | 0.260 | 0.0124 | 0.0371 (RSS) |
Step 3: worst case
Worst case assumes every part sits at the limit that hurts, all at once. The half width of the gap is the plain sum of the half widths:
so the gap runs from 0.080 to 0.600 mm. That breaks both requirements: the circlip might not seat, and the end float can exceed 0.500 mm. On a worst case basis the design fails: the tolerances must be tightened or a selective shim added.
Step 4: root sum square (RSS)
RSS treats each dimension as an independent random variable. If every tolerance is ±3σ of a centred normal process, the variances add, so the half width of the gap is the square root of the sum of the squared half widths:
The RSS gap is 0.229 to 0.451 mm, comfortably inside the 0.100 to 0.500 mm requirement. The seeded Monte Carlo run in the calculator (20,000 samples, seed 1) agrees: mean 0.340 mm, σ 0.038 mm, and 0.01 % of assemblies outside the requirement.
Step 5: Bender's 1.5 factor
Bender (1962) observed that production parts are rarely centred normals, and proposed multiplying the RSS result by 1.5 as a practical allowance:
so the gap runs from 0.173 to 0.507 mm. The lower limit is safe. The upper limit now sits 0.007 mm over. The Bender result falls between RSS and worst case. In this example it is the one that asks a useful question: how confident are we in the spacer and hub processes?
The three answers side by side
| Method | Half width (mm) | Gap range (mm) | Against 0.100 to 0.500 |
|---|---|---|---|
| Worst case | ± 0.260 | 0.080 to 0.600 | Outside 0.100 to 0.500 |
| RSS | ± 0.111 | 0.229 to 0.451 | Inside 0.100 to 0.500 |
| RSS × 1.5 (Bender) | ± 0.167 | 0.173 to 0.507 | Outside 0.100 to 0.500 |
| Monte Carlo, ±3σ normals | σ 0.038 | 0.226 to 0.453 (0.135 to 99.865 percentile) | 0.01 % outside |
What RSS quietly assumes: Cp and Cpk
The RSS line above is only as good as the statement "each tolerance is ±3σ of a centred normal". In capability terms that is Cp = Cpk = 1.0 for every part. Real processes differ in two directions, and they pull the answer opposite ways.
| Process assumption | Gap σ (mm) | Monte Carlo mean (mm) | Outside 0.100 to 0.500 |
|---|---|---|---|
| Cp = Cpk = 1.0 (±3σ, centred) | 0.037 | 0.340 | 0.01 % |
| Cp = Cpk = 1.33 (±4σ, centred) | 0.028 | 0.340 | 0.00 % |
| Cp = 1.33, every mean shifted 1σ to open the gap (Cpk = 1.0) | 0.028 | 0.405 | 0.04 % |
Better capability shrinks the spread. Mean shifts that all lean the same way move the whole distribution, and the reject rate climbs even though every part is still inside its drawing tolerance. Shifts that lean the same way are not rare: a turner who aims for maximum material on every shaft face, or a batch of spacers ground from one setting, produce exactly that correlation. This is what the Bender factor, or an explicit mean shift, is there to cover. Ask the supplier for Cpk, not Cp, and model the shift if Cpk is well below Cp.
Which method to use
| Method | Use when | Avoid when |
|---|---|---|
| Worst case | Two to four contributors; safety-critical fits; one-off or low volume builds; no capability data; interchangeable spares must fit any assembly. | Many contributors, where it forces tolerances tighter than the processes need. |
| RSS | Five or more independent contributors from stable, centred processes with known Cpk of 1.0 or better; volume production that accepts a small reject or rework rate. | Few contributors, unknown suppliers, or correlated parts (same machine, same setting, same batch). |
| RSS × 1.5 (Bender) | Early design, when statistical tolerancing is justified by volume but process data does not exist yet. | When real Cpk data is available: model the shift instead. |
| Monte Carlo | Non-normal contributors (uniform, skewed), GD&T bonus, or when you need a reject rate rather than a range. | As a substitute for knowing the input distributions: the output is only as good as they are. |
Common mistakes
| Mistake | What goes wrong | Fix |
|---|---|---|
| Inconsistent sign convention | A dimension added instead of subtracted moves the nominal gap by twice its size. | Draw the loop first. One direction is positive; each dimension gets its sign from the direction it is walked. |
| Unilateral tolerances used as if bilateral | Nominal gap taken from drawing values, here 0.200 instead of 0.340 mm. | Convert every contributor to mean ± half width before adding. |
| Mixing units | A purchased part quoted in inches added to a metric stack; a 0.002 in tolerance read as 0.002 mm. | Convert every contributor to one unit before entering it. The calculator uses one unit per stack. |
| Forgetting GD&T bonus | A position tolerance at MMC grows as the feature departs from MMC. Using the stated zone alone understates the variation. | Add the bonus to the zone, then halve it: position T with bonus B becomes ± (T + B) / 2 (ASME Y14.5-2018 terms). |
| Two dimensions per part in the loop | Double-counts a part and inflates the stack. | Each part in the loop contributes one dimension, between the two faces the loop touches. |
| RSS on two or three parts | The statistical benefit is small and the normal assumption carries the whole answer. | Use worst case, or Monte Carlo with real distributions. |
Scope of this example
The stack is one-dimensional and linear: every dimension acts along the shaft axis with a sensitivity of +1 or -1. It ignores thermal growth of the shaft and housing, bearing internal clearance, circlip dish and groove wall chamfer, and any tilt of the faces. Where face perpendicularity matters, a GD&T orientation or runout tolerance on the spacer and hub faces belongs in the loop too, and ASME Y14.5-2018 defines how those zones apply.
References
| Source | Used for |
|---|---|
| ASME Y14.5-2018, Dimensioning and Tolerancing | GD&T terms: position, MMC, bonus tolerance, orientation. |
| Bender, A. (1962), "Benderizing tolerances: a simple practical probability method of handling tolerances for limit stack-ups", Graphic Science, December 1962 | The 1.5 inflation factor on RSS. |
| Fischer, B. R., Mechanical Tolerance Stackup and Analysis, 2nd ed., CRC Press, 2011 | Loop diagram, sign convention, equal-bilateral conversion, worst case and RSS. |
| ISO 492:2023, Rolling bearings, radial bearings, geometrical product specifications and tolerance values | Inner ring width tolerance, Normal tolerance class. |
| DIN 471:2011, Retaining rings for shafts | Circlip thickness and tolerance. |
Related: tolerance stack-up calculator, press fit calculator, all guides.