Tolerance Stack-Up Calculator (Worst Case, RSS, Monte Carlo)
Enter each dimension in a one-dimensional loop with its nominal, tolerance and direction. The calculator returns the nominal gap, the worst case limits, the RSS limits and a seeded Monte Carlo distribution with yield against an optional target. Values are in millimetres by default, with an inch toggle. The stack is stored in the page URL so it can be shared, exported as CSV or printed as a report.
| # | Name | Sign | Nominal (mm) | +Tol or zone (mm) | -Tol (mm) | GD&T | Bonus (mm) | Distribution | k | Row actions |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | n/a | |||||||||
| 2 | n/a | |||||||||
| 3 | n/a |
Results
Worst case
- Nominal gap
- 10.000 mm
- Min
- 9.800 mm
- Max
- 10.200 mm
- Half width
- ± 0.200 mm
RSS
- Min
- 9.878 mm
- Max
- 10.122 mm
- Half width
- ± 0.122 mm
- Sigma
- 0.041 mm
Bender factor 1.0
Monte Carlo
- Mean
- 10.000 mm
- Sigma
- 0.041 mm
- P0.135
- 9.877 mm
- P50
- 10.000 mm
- P99.865
- 10.127 mm
- Sample min / max
- 9.847 / 10.165
20,000 samples
Every value below uses the inputs above, in mm, and updates as you edit them.
1. Equal-bilateral form
Each tolerance is converted to a mean and a symmetric half width, so unequal limits shift the mean. Sigma assumes the half width equals k sigma for a normal contributor, or √3 sigma for a uniform one.
| Name | Nominal | T+ | T− | Mean | Half width | Sigma |
|---|---|---|---|---|---|---|
| Dim 1 | 25.000 | 0.100 | 0.100 | 25.000 | 0.100 | 0.033 |
| Dim 2 | 10.000 | 0.050 | 0.050 | 10.000 | 0.050 | 0.017 |
| Dim 3 | 5.000 | 0.050 | 0.050 | 5.000 | 0.050 | 0.017 |
2. Worst case
Signed means add to the nominal gap. Half widths add without sign, because every part can sit at its limit at once.
G = 25.000 − 10.000 − 5.000 = 10.000 mm
hw = 0.100 + 0.050 + 0.050 = 0.200 mm
min = 10.000 − 0.200 = 9.800 mm, max = 10.000 + 0.200 = 10.200 mm
3. RSS
Independent variations add as squares, so the stack half width is the root of the sum of squared half widths. k is the Bender factor: 1.0 for plain RSS, 1.5 to allow for mean shift.
hw = 1.0 × √(0.100² + 0.050² + 0.050²) = 1.0 × √0.015000 = 1.0 × 0.122 = 0.122 mm
σ = √(0.033² + 0.017² + 0.017²) = 0.041 mm
min = 9.878 mm, max = 10.122 mm
4. Monte Carlo
A sample is one virtual assembly: every contributor gets a random value and the gap is summed with the signs above.
Normal contributors are drawn with mean m and σ = hw / k. Uniform contributors are drawn evenly across m ± hw. The generator is seeded, so the same inputs give the same answer.
P0.135 and P99.865 are the gaps with 0.135 % of samples below and above them, the ±3σ points of a normal distribution. The line on the histogram is the normal curve from the RSS mean and σ.
N = 20,000, seed 1: mean = 10.000 mm, σ = 0.041 mm; RSS σ = 0.041 mm, difference 0.79 %
Monte Carlo histogram
Loop diagram
Method
Equal-bilateral conversion. Each contributor is first converted to a mean and an equal-bilateral half width. For a plus/minus tolerance, mean = nominal + (plus - minus) / 2 and half width = (plus + minus) / 2, so 10 +0.2/-0.1 becomes 10.05 ± 0.15. A GD&T position tolerance of zone T with bonus B at MMC becomes nominal ± (T + B) / 2; a profile tolerance of zone T becomes nominal ± T / 2 (Fischer 2011, ASME Y14.5-2018).
Worst case. The nominal gap is the signed sum of the contributor means, with positive contributors in the loop direction and negative ones against it. The worst case half width is the plain sum of all half widths, and the limits are the nominal gap minus and plus that sum. Every part at its limit at the same time is assumed, so the result is conservative.
Root sum square (RSS). The RSS half width is the square root of the sum of the squared half widths, multiplied by the Bender factor. A factor of 1.0 gives the textbook RSS; 1.5 is the inflation Bender proposed to cover mean shifts and non-normal processes seen in production (Bender 1962). The reported sigma is the root sum square of the contributor sigmas.
Monte Carlo. Each sample draws every contributor from its distribution and adds the draws with their signs. A normal contributor has sigma = half width / k, where k is the sigma multiplier (default 3, so the tolerance equals 3 sigma). A uniform contributor is drawn evenly across its full tolerance, with sigma = half width / √3. The generator is seeded (mulberry32, Box-Muller), so the same inputs and seed always give the same result. Percentiles use linear interpolation on the sorted samples (Creveling 1997).
Assumptions
- The stack is one-dimensional and linear: every contributor adds or subtracts directly along one axis, with a sensitivity of +1 or -1.
- Contributors are statistically independent.
- A normal tolerance equals k sigma of the process, with k = 3 by default.
- GD&T position and profile tolerances are converted to equal-bilateral values on the nominal. Datum shift, datum simulation and form variation are not modelled.
- No thermal expansion, deflection under load or assembly shift is included.
- All lengths in one stack use one unit.
Standards and references
| Standard | Note |
|---|---|
| ASME Y14.5-2018, Dimensioning and Tolerancing | GD&T terms, position and profile zones, bonus tolerance at MMC. |
| Bender, A., SAE Paper 620206, 1962 | Statistical tolerancing for the designer; source of the 1.5 RSS inflation factor. |
| Fischer, B. R., Mechanical Tolerance Stackup and Analysis, 2nd ed., CRC Press, 2011 | Loop diagram, sign convention, equal-bilateral conversion, worst case and RSS method. |
| Creveling, C. M., Tolerance Design, Addison-Wesley, 1997 | Statistical tolerancing and Monte Carlo simulation of assemblies. |
Worked example: three-part linear stack
A 25 ± 0.1 mm housing bore contains a 10 ± 0.05 mm spacer and a 5 ± 0.05 mm bush. The gap is 25 - 10 - 5. All three are normal with k = 3, Bender factor 1.0. This is the default stack loaded in the calculator.
| Result | Value |
|---|---|
| Nominal gap | 10.000 mm |
| Worst case | 9.800 to 10.200 mm (± 0.200) |
| RSS | 9.878 to 10.122 mm (± 0.122), sigma 0.041 mm |
| Monte Carlo, seed 1, 20,000 samples | mean 10.000 mm, sigma 0.041 mm |
Frequently asked questions
When should I use RSS instead of worst case?
Use worst case when every assembly must fit, the part count is small, or failure is safety critical. Use RSS when there are several independent contributors from capable processes and a small reject rate is acceptable. RSS gives a tighter band because all parts rarely sit at their limits together.
What is the Bender factor?
It is a multiplier on the RSS half width. Bender (SAE 620206, 1962) proposed 1.5 to allow for process mean shifts and distributions that are not centred normals. Use 1.0 for textbook RSS and 1.5 for a more conservative statistical result.
How is bonus tolerance at MMC applied?
For a position tolerance, set the zone T and the bonus you expect from the feature departing from MMC. The contributor becomes nominal ± (T + bonus) / 2. For example T 0.2 mm with 0.1 mm bonus gives ± 0.15 mm. Bonus is only offered for position.
Why does the Monte Carlo sigma differ slightly from the RSS sigma?
Monte Carlo estimates sigma from a finite random sample, so it carries sampling error of roughly 1 percent at 20,000 samples. The default stack gives 0.041 mm from both methods. Larger sample counts reduce the difference; a different seed gives a slightly different estimate.
Can I mix millimetres and inches in one stack?
No. One stack uses one unit. The toggle converts every displayed value between mm and inches; the calculation itself is the same.
How do I share or save a stack?
The whole stack is encoded in the page URL after #s=. Use Copy link and send the address; opening it restores every row and setting. Export CSV saves the contributor table and Download report prints the inputs, results and method.
What sign should each contributor have?
Draw the loop from one side of the gap to the other. Dimensions that go in the positive direction are +, those that come back are -. The nominal gap is the signed sum.