Tolerance Stack-Up Analysis: Worst-Case vs RSS Guide
Every assembly you ship is a bet that a chain of imperfect dimensions still adds up to a working product. Each feature on each part is made somewhere inside its tolerance zone, and the gaps, preloads and interferences you actually care about are emergent properties of all of them at once. Tolerance stack-up analysis is how you find out what the assembly will really do before the parts exist — and the method you choose changes the answer by a lot.
Two methods for tolerance stack-up analysis
For a linear (1D) chain — dimensions laid end to end along one direction — the assembly dimension is a signed sum of the contributors. Nominal gap g equals the closing dimension minus everything in between. What differs between methods is how the individual tolerances combine.
Worst-case (arithmetic) stack-up
Worst-case analysis assumes every contributor lands simultaneously on the corner that hurts you most. The assembly tolerance is the plain sum:
Tasm = T1 + T2 + … + Tn
If the drawing tolerances are respected and the parts are actually conforming, the assembly cannot fail — the result bounds every physically possible combination. That guarantee is why worst-case is the required method for safety-critical and regulated work: there is no residual probability to argue about.
RSS (root-sum-square) stack-up
Statistical analysis accepts that the corners almost never coincide. If each contributor varies independently with its ±t treated as roughly ±3σ of a distribution, the assembly standard deviation combines by quadrature and the RSS tolerance is:
Tasm = √(T1² + T2² + … + Tn²)
RSS grows like √n instead of n — for equal contributors, far more forgiving. The price is that a small fraction of assemblies will fall outside the RSS band; you are trading a hard guarantee for a quantified yield.
Worked example: a housing and three rings
Three rings of width 16.00 ±0.05 mm sit side by side inside a housing whose shoulder-to-shoulder depth is 50.00 ±0.10 mm. The end gap is what keeps the stack from binding:
- Chain:
g = Lhousing − (w1 + w2 + w3) - Nominal:
g = 50.00 − 48.00 = 2.00 mm
Worst-case. The gap tolerance is 0.10 + 3 × 0.05 = ±0.25 mm, so g = 2.00 ±0.25 — somewhere between 1.75 and 2.25 mm, guaranteed. If the design needs the gap to stay above 1.80 mm, worst-case analysis says the drawing fails: a conforming set of parts can still close the gap to 1.75 mm. You would have to tighten a tolerance or move the nominal.
RSS. The same chain statistically: √(0.10² + 0.05² + 0.05² + 0.05²) = √0.0175 ≈ 0.132 mm, so g = 2.00 ±0.13 as an equivalent ±3σ band — the assembly σ is about 0.044 mm. The 1.80 mm requirement is 4.5σ below the mean, which corresponds to single-digit ppm fallout if the distribution assumptions hold. Same drawing, same parts — one method says redesign, the other says ship.
That gap between the two answers is the entire business case for statistical analysis, and also the entire risk. Which one you are allowed to believe depends on the questions in the companion article, worst-case vs statistical tolerance analysis.
Choosing between them
| Situation | Method | Why |
|---|---|---|
| Safety or regulatory requirement | Worst-case | No residual fallout to justify to a certifying body |
| Very low volume / first articles | Worst-case | Statistics of a process you have not measured are fiction |
| Production parts under process control | RSS | Independence and normality are defensible; yield is quantified |
| Many contributors, tight assembly spec | RSS | Worst-case often demands tolerances that are not manufacturable |
| Correlated contributors (same die, same setup) | Worst-case or modelled correlation | RSS assumes independence; correlation breaks it silently |
Where hand calculation falls apart
One linear chain of four dimensions is a spreadsheet afternoon. Real assemblies stop being that problem quickly:
- Contributor count. Past five or six parts, every tolerance needs a sign, a sensitivity and a justification. Sign errors dominate — a dimension entered with the wrong direction produces a confident, wrong number.
- Dimension chains are not linear. Fastener clearance lets parts float and rotate; a flatness callout tips one part relative to the next; the true model is 3D kinematics, not a sum. A 1D worst-case on a 3D problem is systematically optimistic about tilt-driven variation.
- Contact depends on the answer. Whether a pin bottoms on the left or right face changes the chain itself — the worst case is found by searching configurations, not by adding numbers.
- Standards apply per feature. An ISO 286 fit on a bore, a position callout on a bolt circle and a general-tolerance block on a casting all express variation differently and must be normalized before they can sum.
This is the wall we built SuperNX against. It reads your Siemens NX model directly, finds the dimension chains through the actual mating geometry, and runs worst-case and statistical analysis with per-contributor sensitivity — then writes a report and a toleranced model back, rather than a spreadsheet you re-transcribe by hand. It exists because the honest version of this work does not fit in a spreadsheet once the assembly gets real.
The same steps on a real NX part
Here is the chain method on a real part. SuperNX ran its free demo part, a planar linkage on a base plate, and solved KC51, “Link apex pin T6 to base edge (perpendicular distance)”. The part’s PMI tolerance on it is very wide, 50.99 +0.1/−18.8 mm, a ±9.45 mm half-band about its centre, so KC51 passes with a large margin. The instructive part is the chain and the ranking.
| Contributor | Kind | Standard / fit | Term (mm) |
|---|---|---|---|
| T1 J1 bore height above base edge | machining | ISO 2768-1 f | ±0.049 |
| T2 link centre distance J1–J3 | machining | ISO 2768-1 f | ±0.098 |
| J1 pivot clearance | clearance | H7/g6 | ±0.012 |
| J3 apex hinge clearance | clearance | H7/g6 | ±0.012 |
Worst case is the sum, ±0.171 mm. RSS is ±0.111 mm. The dominant contributor is T2, the link centre distance: halving it brings the worst case down to ±0.122 mm, while the two H7/g6 clearances together contribute only ±0.024 mm. That ranking is what tells you which tolerance to tighten, or relax, first.
See the full demo result (no sign-up)
The short version
- Worst-case:
T = ΣTi— a guarantee, paid for in tight tolerances. - RSS:
T = √ΣTi²— a yield, paid for in assumptions you must actually verify. - Do the arithmetic on one chain by hand once — it is worth it. Do not run a thirty-part assembly that way.
Video chapters and transcript
- 0:00 Intro
- 0:20 Requirement and loop
- 0:54 Signs and nominals
- 1:48 Worst case
- 2:26 RSS
- 3:18 Side by side
- 3:43 Rank the contributors
- 4:16 Fix the biggest
- 5:04 The method
- 5:29 Doing it automatically
Read the full transcript
0:00 Intro
You have a stack of parts and a gap that has to stay between two limits. How do you actually check it? In the next few minutes we'll do a tolerance stack-up step by step, on a real example. And we'll finish by finding the one tolerance you should tighten, and the one you shouldn't.
0:20 Requirement and loop
Step one: define the requirement. Here it's a lid. A housing, fifty millimetres deep, holds three parts stacked inside it: twenty millimetres, fifteen millimetres, and fourteen point six millimetres. The gap left at the top must stay between zero point one and zero point eight millimetres. Step two is to draw the loop. Start on one side of the gap, and walk through every part that touches until you reach the other side.
0:54 Signs and nominals
Step three: give every link a sign and a tolerance. A link is positive if making it bigger opens the gap, and negative if it closes the gap. The housing depth is positive: a deeper housing opens the gap. Fifty, plus or minus zero point one five. Part one is negative, because it fills the space. Twenty, plus or minus zero point zero five. Part two: fifteen, plus or minus zero point zero five. Part three: fourteen point six, plus or minus zero point one. All equal-bilateral. Step four: add the nominals, with their signs. Fifty, minus twenty, minus fifteen, minus fourteen point six, leaves a nominal gap of zero point four.
1:48 Worst case
Step five: worst case. Every part lands at its limit, in the wrong direction, all at once. You simply add the tolerances, ignoring the signs. Zero point one five, plus zero point zero five, plus zero point zero five, plus zero point one, gives plus or minus zero point three five. So the gap runs from zero point zero five to zero point seven five. Zero point zero five is below the minimum of zero point one. Worst case says this design fails.
2:26 RSS
Step six: RSS, root sum square. Square each tolerance, add the squares, and take the root. The squares are zero point zero two two five, zero point zero zero two five twice, and zero point zero one. The sum is zero point zero three seven five, and its root is about zero point one nine. The gap runs from zero point two one to zero point five nine. That's inside the limits, so RSS says pass. Use worst case when failure is costly, parts are few, or the process is unknown. Use RSS for many parts made in volume on centred processes. Our worst case versus RSS video covers it.
3:18 Side by side
Put the two results side by side. The requirement is a gap of at least zero point one millimetres. Worst case reaches down to zero point zero five, below the minimum. RSS stays between zero point two one and zero point five nine. The upper limit of zero point eight is met by both methods. It's the low end that decides.
3:43 Rank the contributors
Step seven: rank the contributors. For worst case, divide each tolerance by the total. For RSS, divide each squared tolerance by the total variance. The housing depth dominates: forty-three percent of the worst-case band, and sixty percent of the RSS variance. Part three comes second, and parts one and two barely matter. Squaring makes the biggest term count even more, but the ranking is the same either way.
4:16 Fix the biggest
Step eight: tighten the biggest contributor, and check again. Take the housing depth from plus or minus zero point one five down to zero point one. The worst-case total drops to plus or minus zero point three. The gap now runs from zero point one to zero point seven. That meets the minimum, even at worst case. Now the trap. Part one is the easy one to tighten. But bringing it to plus or minus zero point zero two only gets you to zero point three two, a gap of zero point zero eight to zero point seven two. Still failing. Tighten the biggest contributor, not the easiest one.
5:04 The method
Here's the method to repeat on every gap. Define the requirement, and draw the loop through every part that touches. Give each link a sign, list its nominal and tolerance, and sum the nominals. Run worst case and RSS, and compare them. Then rank the contributors, tighten the biggest one, and check again.
5:29 Doing it automatically
That is one gap. A real assembly has dozens. SuperNX builds the contribution chain for every key characteristic straight from your Siemens NX model, runs worst case and RSS on each, and shows which contributors drive every result. There's a free demo part on nxtolerance.com, plus a free ISO 286 and ISO 2768 calculator. No sign-up needed. Links are in the description.