Tolerance Stack-up Analysis
Chains and loops, worst case, RSS, modified RSS and Monte Carlo, with the Machinery’s Handbook example worked step by step.
Parts are made with some variation. A single part’s tolerance is easy to read; whether an assembly will always go together depends on how the variations of several parts add up. A tolerance stack-up adds up the variation of every dimension that decides a gap, a clearance or a fit, so you can predict how the assembly will behave before anything is made. This page follows the method in the Machinery’s Handbook (“Tolerance Analysis and Assignment”), including its worked example, and extends it with geometric tolerances and design guidance. The basic one-dimensional worst-case and RSS examples are also on the GD&T Inspection and Tolerance Stack-up page. It is part of the Fits & Tolerances guide.
What a stack-up is
The Handbook describes two complementary jobs. Tolerance analysis works bottom-up: given the tolerances on each part, what variation will the assembly have? Tolerance assignment works top-down: given the variation the assembly can accept, what tolerance can each part have? Analysis is done on preliminary or final part tolerances to find needed design changes; assignment is done at the design stage to meet the assembly and function requirements. In practice you iterate between them.
The Handbook adds a warning that applies to all of it: part tolerances are not assigned arbitrarily, but based on manufacturing process capability, cost limits, and assembly and functional requirements. Overly restrictive tolerances limit the choice of processes and drive up cost, and small differences in tolerance can change cost dramatically.
The stack-up chain
A stack-up starts with a chain diagram: a picture of the assembly that identifies the dimension you want to solve (the assembly dimension, A) and every part dimension that contributes to it. Then write the chain as an equation, with a sign convention that gives each dimension a direction: positive for right or up, negative for left or down.
A = − B − C − D + E + F + G
That is the equation for the Handbook’s example (its Figure 5), a small bearing assembly with six contributing dimensions. The sizes below are in inches; the table also gives the mean and standard deviation of each dimension from manufacturing data.
| Dimension | Sign | Max | Min | Mean (µ), manufacturing data | Std. deviation (σ), manufacturing data |
|---|---|---|---|---|---|
| B | − | 0.3760 | 0.3750 | 0.375464 | 0.000106 |
| C | − | 0.5906 | 0.5858 | 0.588126 | 0.001004 |
| D | − | 1.7510 | 1.7490 | 1.750128 | 0.000203 |
| E | + | 0.1875 | 0.1825 | 0.185147 | 0.000874 |
| F | + | 1.7550 | 1.7450 | 1.750748 | 0.001200 |
| G | + | 0.9395 | 0.9355 | 0.937331 | 0.000517 |
- Clear part definition is essential. The Handbook stresses that unambiguous definition, as provided by geometric dimensioning and tolerancing, is required for accurate analysis, and that any variation allowed by reference drawings must be included in the dimensions of the stack.
- Use the loop that matters. Follow the chain from one side of the gap, through each part and each contact, to the other side. A missing dimension or a wrongly signed one is the commonest source of a wrong answer.
Four methods
| Method | Idea | Use it when | Result |
|---|---|---|---|
| Worst case | Every dimension at its extreme, in the worst direction | You must guarantee fit; few dimensions (about seven or fewer) in the chain; parts are inspected so none are out of tolerance | Guarantees 100% fit; tends to ask for tight, costly tolerances |
| Statistical | Each dimension is a normal distribution with a mean and a standard deviation from real data; the assembly dimension is another normal distribution | You have data from a controlled process (SPC); many dimensions contribute | Likely values and ranges; allows larger tolerances; predicts conformance and defect rates; does not guarantee conformance |
| Root sum of squares (RSS) | A statistical method with simplifying assumptions: each dimension’s mean is the middle of its tolerance and σ = (max − min) ÷ 6 | You have no manufacturing data but expect centered, normally distributed parts | The assembly is predicted to fall within ±3σ of its mean |
| Monte Carlo | A computer picks random values for every dimension, from its real distribution (normal, uniform or other), and combines them through the chain thousands of times | Distributions are not normal, the equation is nonlinear, or you want defect rates | A probability distribution of the assembly dimension, including defect rates |
Worst case
A worst-case calculation is done twice: once for the maximum assembly dimension and once for the minimum. For a positive contributor use its maximum in the maximum equation and its minimum in the minimum equation; for a negative contributor the opposite:
Amax = − Bmin − Cmin − Dmin + Emax + Fmax + Gmax
Amin = − Bmax − Cmax − Dmax + Emin + Fmin + Gmin
Statistical
Assembly mean: µA = − µB − µC − µD + µE + µF + µG
Assembly standard deviation: σA = √( σB² + σC² + σD² + σE² + σF² + σG² )
The signs matter for the mean but not for σ, because variations add as squares. The normal distribution has about 68.26% of its area within ±1σ, 95.44% within ±2σ, and 99.74% within ±3σ (the Handbook’s statistical chapter). For 99% of assemblies, use ±2.5758σ.
RSS
µ = (max + min) ÷ 2
σ = (max − min) ÷ 6
Amax = µA + 3σA, Amin = µA − 3σA
The dividing-by-6 assumes a process whose ±3σ spread just fits the tolerance (a capability index of 1.0; see Statistical Tolerancing and Process Capability). Real processes that are better than that give a smaller assembly spread; worse processes, a larger one.
Modified RSS
Many practitioners add a safety factor to RSS (commonly 1.5, from Bender’s work, discussed in Fischer’s Mechanical Tolerance Stackup and Analysis) to allow for drift and non-centered processes: Tassembly = 1.5 × √ΣT². It sits between RSS and worst case and is a convenient compromise when there is little data. It is an industry convention, not a standard.
The Handbook’s example, step by step
Worst case
Amax = −0.3750 − 0.5858 − 1.7490 + 0.1875 + 1.7550 + 0.9395 = 0.1722
Amin = −0.3760 − 0.5906 − 1.7510 + 0.1825 + 1.7450 + 0.9355 = 0.1454
Worst case predicts 0.1454 to 0.1722 inch: a band of 0.0268, which is the sum of all six tolerances.
Statistical (99% of assemblies)
µA = −0.375464 − 0.588126 − 1.750128 + 0.185147 + 1.750748 + 0.937331 = 0.159508
σA = √( 0.000106² + 0.001004² + 0.000203² + 0.000874² + 0.001200² + 0.000517² ) = 0.001879
99 percent of the area under a normal curve lies within ±2.5758σ, so the assembly dimension is expected to fall between 0.159508 − 2.5758 × 0.001879 = 0.154668 and 0.159508 + 2.5758 × 0.001879 = 0.164348 inch (the Handbook’s 0.154668 to 0.164348). The spread is 0.0097, about 36% of the worst-case band.
RSS (no manufacturing data)
With no data, take each mean as the middle of its range and σ = (max − min) ÷ 6:
| Dimension | Mean (µ) | Std. deviation (σ) |
|---|---|---|
| B | 0.3755 | 0.000167 |
| C | 0.5882 | 0.000800 |
| D | 1.7500 | 0.000333 |
| E | 0.1850 | 0.000833 |
| F | 1.7500 | 0.001667 |
| G | 0.9375 | 0.000667 |
µA = 0.1588
σA = √Σσ² = 0.002167
Amax = µA + 3σA = 0.165301
Amin = µA − 3σA = 0.152299
RSS predicts 0.152299 to 0.165301 inch (the Handbook’s 0.152299 to 0.165301), a band of 0.0130, about 49% of the worst case.
Monte Carlo
Using the same manufacturing means and standard deviations, 100,000 random assemblies (computer-generated, repeatable seed) give:
- Mean 0.159515 and standard deviation 0.001885 (compare 0.159508 and 0.001879 from the formulas: the same, as it should be).
- Range of the simulated assemblies: 0.1515 to 0.1683 inch.
- 98.96% fall inside the statistical 99% limits, and 100% fall inside the worst-case limits (0.1454 to 0.1722).
- For normal distributions the Monte Carlo result simply confirms the formulas. Its value is for non-normal data, nonlinear chains and defect-rate predictions.
Modified RSS
Summing the ± tolerances gives 0.0134 (worst case). Their RSS is 0.0065. With the 1.5 factor: ± 0.0098, about the middle of the assembly range 0.1588: 0.1490 to 0.1686 inch.
Geometric tolerances in a stack
A stack of plus-minus size dimensions is only part of the story. Form, orientation, location and runout tolerances also move features, and they have to be put in the chain as numbers. The Handbook warns that care must be taken to ensure the effects of geometric variation are included in the dimensions of the stack-up.
| Tolerance in the loop | How it enters the stack |
|---|---|
| Position (⌀t) | A feature’s axis may be up to t ÷ 2 from true position in any direction. In a one-dimensional stack the contribution is ± t ÷ 2; add the bonus tolerance if the size is at a modifier condition. Datum shift adds more (see the Position and Location page) |
| Size at MMC or LMC | The virtual condition (size plus geometric tolerance) is the worst-case boundary for fits and gaps; use it in a worst-case loop |
| Flatness, perpendicularity, parallelism | Add the full zone width on the surface involved (a flat surface that sits across a gap can be out by its flatness) |
| Profile | Equal bilateral profile t contributes ± t ÷ 2; a unilateral zone contributes t on one side only |
| Runout | Contributes its full indicator movement in the direction of the gap, and half of it to the centerline offset |
| Fits | A bearing or press fit between two parts adds its clearance to the loop wherever the loop passes through the fit (see How Fits Work) |
Angles and two dimensions
When parts act at an angle, a dimension’s effect on the assembly is its component in the direction of the gap: ΔA = ΔX × cos θ, where θ is the angle between the dimension and the gap. The factor cos θ is the sensitivity of the assembly to that dimension. A stack-up of 2D or 3D features is a vector loop: write each dimension as a vector, resolve it along the direction you care about, and add the contributions with their sensitivities. Worst case sums |cos θ| × T; RSS sums (cos θ × T)². An angle tolerance contributes the length of the part times the angle in radians.
Assigning tolerances
Assignment spreads a “tolerance budget” among the contributing dimensions so that the assembly meets its target. The Handbook lists the common ways to do it:
| Method | How it works |
|---|---|
| Even assignment | Part feature tolerances are assigned equally among the dimensions |
| Proportional scaling | Preliminary tolerances are assigned and analyzed. If the assembly tolerance exceeds the allowed amount, the part tolerances are scaled down proportionally |
| Weight factors | A weight factor, based on manufacturing difficulty, is given to each tolerance; the assembly tolerance is divided in proportion to the weights |
| Cost minimization | A cost-against-tolerance relationship is determined for each dimension, and an optimization finds the combination of tolerances with the lowest total cost |
| Total cost minimization | Loosens tolerances to cut cost while also counting the cost of lower yield from defective parts |
There are infinitely many ways to assign part tolerances to reach a given assembly tolerance, so analytical solutions are usually not possible; the methods above are rules for choosing a good one.
More worked examples
Example 1: assigning a budget three ways
The assembly gap may vary by ± 0.30 mm in total (the stack is four dimensions, n = 4).
- Even assignment, worst case: T ÷ n = 0.30 ÷ 4 = ± 0.075 mm on each part.
- Even assignment, RSS: T ÷ √n = 0.30 ÷ 2 = ± 0.150 mm on each part: twice as generous, if you accept the statistical risk.
- Weight factors (worst case), with weights 1, 1, 2, 4 for the four parts in order of how hard they are to hold: the budget is split in proportion to the weights:
| Part | Weight | Tolerance (± mm) |
|---|---|---|
| Part 1 | 1 | 0.038 |
| Part 2 | 1 | 0.038 |
| Part 3 | 2 | 0.075 |
| Part 4 | 4 | 0.150 |
The tolerances add to ± 0.30 mm, as they must, but the hard part gets the largest share.
Example 2: how many parts is “too many” for worst case?
| Parts in the chain (each ± 0.05) | Worst case | RSS | Worst case ÷ RSS |
|---|---|---|---|
| 3 | ± 0.150 | ± 0.087 | 1.73× |
| 5 | ± 0.250 | ± 0.112 | 2.24× |
| 7 | ± 0.350 | ± 0.132 | 2.65× |
| 10 | ± 0.500 | ± 0.158 | 3.16× |
| 15 | ± 0.750 | ± 0.194 | 3.87× |
Worst case grows with n and RSS with √n, so the gap between them widens as the chain gets longer. The Handbook’s “seven or fewer” guideline for worst case reflects this: at seven dimensions worst case is already 2.6 times the RSS result.
Example 3: a vector loop component
A pin is toleranced ± 0.10 mm along a line at 30° to the gap direction. Its effect on the gap is 0.10 × cos 30° = ± 0.0866 mm. At 90° it contributes nothing, at 0° all of it.
Troubleshooting
| Symptom | Likely cause | Try |
|---|---|---|
| Assemblies fail although the stack-up passed | A contributor was missing from the loop, a sign was wrong, or a geometric tolerance was left out | Rebuild the chain from the drawing, check each sign, and add position, form and fit contributions |
| Statistical result looks too good | Parts are not centered or not normally distributed; the process has drifted | Use measured means, or Monte Carlo, or modified RSS; check the process with SPC |
| Worst case demands impossible tolerances | Too many dimensions in the chain, or a loose assembly requirement | Shorten the chain (datum from one feature), or accept a small defect rate with RSS |
| The same assembly dimension depends on a fit | Clearance of a bearing or pin was not counted | Add the fit’s clearance (for example H7/g6) as a contributor |
| An angle’s effect is much larger than expected | A small angle error over a long arm | Use the leg length times the angle in radians, or tolerance the end position directly |
Related
- Fits & Tolerances: the overview and quick reference.
- Dimensional Tolerancing Basics: chain and baseline dimensioning.
- Statistical Tolerancing and Process Capability: Cp, Cpk and defect rates.
- Inspection and Tolerance Stack-up: a basic one-dimensional stack-up and the fastener formulas.
- Tolerance Stack-up Calculator: worst case, RSS, modified RSS and Monte Carlo.
FAQ
Which method should I use?
Worst case if every part must fit and the chain is short; statistical or RSS when there are many dimensions and the processes are capable and centered; Monte Carlo when the data are not normal or you need a defect rate. Many designs check worst case first, then relax.
Why is the RSS range so much narrower than worst case?
Because it is very unlikely that every part will be at its extreme in the same direction at once. RSS exploits that, which is why it needs the assumptions of independent, centered, roughly normal dimensions.
Where does σ = (max − min) ÷ 6 come from?
It assumes the tolerance band is ±3σ, which gives 99.73% of parts inside the limits for a centered normal distribution (capability index 1.0). If your process is better than that, σ is smaller.
How do I handle a dimension with a bilateral and a unilateral tolerance?
Convert every dimension to a mean (the middle of its range) and an equal ± tolerance before you add. A dimension 25.00 +0.10 −0.00 becomes 25.05 ± 0.05.
Should I include a safety factor?
On RSS, many companies do (the modified RSS factor of 1.5); on worst case, no, because it already assumes the worst. Choose a factor your quality system can justify with data.
Can a stack-up replace a gage or a test?
No. It predicts the assembly from the drawing; it does not know the actual parts. Verify critical assemblies with measured parts or a functional test.
References
- Machinery’s Handbook, 31st edition, Industrial Press: “Tolerance Analysis and Assignment” (the tolerance stack-up chain; worst-case, statistical, RSS and Monte Carlo methods; tolerance assignment) and “Statistical Analysis of Manufacturing Data”.
- Fischer, B. R., Mechanical Tolerance Stackup and Analysis, CRC Press (modified RSS, geometric tolerances in stack-ups, vector loops).
- Bender, A., “Statistical Tolerancing as it Relates to Quality Control and the Designer”, Automotive Division Newsletter of ASQC, 1968 (the 1.5 factor).
- ASME Y14.5-2018, Dimensioning and Tolerancing.
Last reviewed: October 2026. The worst-case, statistical and RSS results reproduce the Handbook’s worked example.
