Spin Wheel Fairness Study, 100,000 Spins
We ran 100,000 automated spins on equal-size wheel slices using the same landing-angle geometry as our live spin wheel. Each configuration was tested for uniform distribution with Pearson's chi-square at α = 0.05. Download the CSV to cite or reproduce the results.
Summary
- Total spins: 100,000
- Spins per segment count: 10,000
- Segment counts tested: 2, 3, 4, 6, 8, 10, 12, 16, 20, 36
- Method: crypto.getRandomValues (Node crypto.randomInt) landing angle → getCurrentSegment geometry
- Uniformity result: All configurations passed χ² at α = 0.05
- Data as of: 2026-09-21
- Download CSV (100,000 spin rows)
| Segments | Spins | χ² | df | Critical 0.05 | Result | Max deviation |
|---|---|---|---|---|---|---|
| 2 | 10,000 | 1.9044 | 1 | 3.841 | pass | 1.38% |
| 3 | 10,000 | 2.5598 | 2 | 5.991 | pass | 2.17% |
| 4 | 10,000 | 6.0232 | 3 | 7.815 | pass | 3.28% |
| 6 | 10,000 | 2.9768 | 5 | 11.07 | pass | 3.68% |
| 8 | 10,000 | 2.9072 | 7 | 14.067 | pass | 3.36% |
| 10 | 10,000 | 4.494 | 9 | 16.919 | pass | 3.7% |
| 12 | 10,000 | 6.3272 | 11 | 19.675 | pass | 4.52% |
| 16 | 10,000 | 17.664 | 15 | 25 | pass | 8.8% |
| 20 | 10,000 | 17.528 | 19 | 30.144 | pass | 8% |
| 36 | 10,000 | 30.7304 | 35 | 49.998 | pass | 13.6% |
Methodology
For each segment count k, we simulated 10,000 independent spins. Each spin drew a landing angle with the same secure browser randomness used in production, then mapped the angle to a slice index using the same equal-arc formula as the live wheel (pointer on the right).
Expected count per slice is n/k. We computed Pearson's chi-square statistic χ² = Σ(O−E)²/E with k−1 degrees of freedom and compared to the α = 0.05 critical value. Configurations with χ² ≤ critical value are consistent with a uniform distribution.
This study does not cover weighted slices, removed entries mid-session, or human timing, only equal segments and cryptographic landing angles.
This simulation evaluates the random-selection and landing-angle model used by the wheel; it does not measure physical-wheel effects such as friction or pointer mechanics.
2 segments, 10,000 spins
χ² = 1.9044 (df = 1, critical 0.05 = 3.841), uniform (pass) · max deviation 1.38%
| Slice index | Observed | Expected | Deviation % |
|---|---|---|---|
| 0 | 5069 | 5000 | 1.38% |
| 1 | 4931 | 5000 | -1.38% |
3 segments, 10,000 spins
χ² = 2.5598 (df = 2, critical 0.05 = 5.991), uniform (pass) · max deviation 2.17%
| Slice index | Observed | Expected | Deviation % |
|---|---|---|---|
| 0 | 3261 | 3333.33 | -2.17% |
| 1 | 3388 | 3333.33 | 1.64% |
| 2 | 3351 | 3333.33 | 0.53% |
4 segments, 10,000 spins
χ² = 6.0232 (df = 3, critical 0.05 = 7.815), uniform (pass) · max deviation 3.28%
| Slice index | Observed | Expected | Deviation % |
|---|---|---|---|
| 0 | 2534 | 2500 | 1.36% |
| 1 | 2582 | 2500 | 3.28% |
| 2 | 2457 | 2500 | -1.72% |
| 3 | 2427 | 2500 | -2.92% |
6 segments, 10,000 spins
χ² = 2.9768 (df = 5, critical 0.05 = 11.07), uniform (pass) · max deviation 3.68%
| Slice index | Observed | Expected | Deviation % |
|---|---|---|---|
| 0 | 1649 | 1666.67 | -1.06% |
| 1 | 1657 | 1666.67 | -0.58% |
| 2 | 1671 | 1666.67 | 0.26% |
| 3 | 1728 | 1666.67 | 3.68% |
| 4 | 1643 | 1666.67 | -1.42% |
| 5 | 1652 | 1666.67 | -0.88% |
8 segments, 10,000 spins
χ² = 2.9072 (df = 7, critical 0.05 = 14.067), uniform (pass) · max deviation 3.36%
| Slice index | Observed | Expected | Deviation % |
|---|---|---|---|
| 0 | 1208 | 1250 | -3.36% |
| 1 | 1246 | 1250 | -0.32% |
| 2 | 1240 | 1250 | -0.8% |
| 3 | 1253 | 1250 | 0.24% |
| 4 | 1274 | 1250 | 1.92% |
| 5 | 1247 | 1250 | -0.24% |
| 6 | 1284 | 1250 | 2.72% |
| 7 | 1248 | 1250 | -0.16% |
10 segments, 10,000 spins
χ² = 4.494 (df = 9, critical 0.05 = 16.919), uniform (pass) · max deviation 3.7%
| Slice index | Observed | Expected | Deviation % |
|---|---|---|---|
| 0 | 963 | 1000 | -3.7% |
| 1 | 996 | 1000 | -0.4% |
| 2 | 1031 | 1000 | 3.1% |
| 3 | 1025 | 1000 | 2.5% |
| 4 | 1023 | 1000 | 2.3% |
| 5 | 1000 | 1000 | 0% |
| 6 | 983 | 1000 | -1.7% |
| 7 | 1011 | 1000 | 1.1% |
| 8 | 978 | 1000 | -2.2% |
| 9 | 990 | 1000 | -1% |
12 segments, 10,000 spins
χ² = 6.3272 (df = 11, critical 0.05 = 19.675), uniform (pass) · max deviation 4.52%
| Slice index | Observed | Expected | Deviation % |
|---|---|---|---|
| 0 | 850 | 833.33 | 2% |
| 1 | 799 | 833.33 | -4.12% |
| 2 | 813 | 833.33 | -2.44% |
| 3 | 829 | 833.33 | -0.52% |
| 4 | 840 | 833.33 | 0.8% |
| 5 | 837 | 833.33 | 0.44% |
| 6 | 856 | 833.33 | 2.72% |
| 7 | 871 | 833.33 | 4.52% |
| 8 | 856 | 833.33 | 2.72% |
| 9 | 816 | 833.33 | -2.08% |
| 10 | 819 | 833.33 | -1.72% |
| 11 | 814 | 833.33 | -2.32% |
16 segments, 10,000 spins
χ² = 17.664 (df = 15, critical 0.05 = 25), uniform (pass) · max deviation 8.8%
| Slice index | Observed | Expected | Deviation % |
|---|---|---|---|
| 0 | 644 | 625 | 3.04% |
| 1 | 659 | 625 | 5.44% |
| 2 | 630 | 625 | 0.8% |
| 3 | 591 | 625 | -5.44% |
| 4 | 616 | 625 | -1.44% |
| 5 | 669 | 625 | 7.04% |
| 6 | 643 | 625 | 2.88% |
| 7 | 606 | 625 | -3.04% |
| 8 | 628 | 625 | 0.48% |
| 9 | 650 | 625 | 4% |
| 10 | 611 | 625 | -2.24% |
| 11 | 609 | 625 | -2.56% |
| 12 | 570 | 625 | -8.8% |
| 13 | 593 | 625 | -5.12% |
| 14 | 637 | 625 | 1.92% |
| 15 | 644 | 625 | 3.04% |
20 segments, 10,000 spins
χ² = 17.528 (df = 19, critical 0.05 = 30.144), uniform (pass) · max deviation 8%
| Slice index | Observed | Expected | Deviation % |
|---|---|---|---|
| 0 | 468 | 500 | -6.4% |
| 1 | 497 | 500 | -0.6% |
| 2 | 506 | 500 | 1.2% |
| 3 | 503 | 500 | 0.6% |
| 4 | 529 | 500 | 5.8% |
| 5 | 519 | 500 | 3.8% |
| 6 | 507 | 500 | 1.4% |
| 7 | 490 | 500 | -2% |
| 8 | 540 | 500 | 8% |
| 9 | 489 | 500 | -2.2% |
| 10 | 517 | 500 | 3.4% |
| 11 | 461 | 500 | -7.8% |
| 12 | 483 | 500 | -3.4% |
| 13 | 510 | 500 | 2% |
| 14 | 486 | 500 | -2.8% |
| 15 | 463 | 500 | -7.4% |
| 16 | 495 | 500 | -1% |
| 17 | 498 | 500 | -0.4% |
| 18 | 525 | 500 | 5% |
| 19 | 514 | 500 | 2.8% |
36 segments, 10,000 spins
χ² = 30.7304 (df = 35, critical 0.05 = 49.998), uniform (pass) · max deviation 13.6%
| Slice index | Observed | Expected | Deviation % |
|---|---|---|---|
| 0 | 299 | 277.78 | 7.64% |
| 1 | 267 | 277.78 | -3.88% |
| 2 | 272 | 277.78 | -2.08% |
| 3 | 288 | 277.78 | 3.68% |
| 4 | 287 | 277.78 | 3.32% |
| 5 | 276 | 277.78 | -0.64% |
| 6 | 277 | 277.78 | -0.28% |
| 7 | 262 | 277.78 | -5.68% |
| 8 | 270 | 277.78 | -2.8% |
| 9 | 254 | 277.78 | -8.56% |
| 10 | 282 | 277.78 | 1.52% |
| 11 | 283 | 277.78 | 1.88% |
| 12 | 297 | 277.78 | 6.92% |
| 13 | 293 | 277.78 | 5.48% |
| 14 | 253 | 277.78 | -8.92% |
| 15 | 281 | 277.78 | 1.16% |
| 16 | 240 | 277.78 | -13.6% |
| 17 | 266 | 277.78 | -4.24% |
| 18 | 266 | 277.78 | -4.24% |
| 19 | 293 | 277.78 | 5.48% |
| 20 | 274 | 277.78 | -1.36% |
| 21 | 276 | 277.78 | -0.64% |
| 22 | 291 | 277.78 | 4.76% |
| 23 | 290 | 277.78 | 4.4% |
| 24 | 298 | 277.78 | 7.28% |
| 25 | 287 | 277.78 | 3.32% |
| 26 | 297 | 277.78 | 6.92% |
| 27 | 256 | 277.78 | -7.84% |
| 28 | 267 | 277.78 | -3.88% |
| 29 | 287 | 277.78 | 3.32% |
| 30 | 295 | 277.78 | 6.2% |
| 31 | 296 | 277.78 | 6.56% |
| 32 | 266 | 277.78 | -4.24% |
| 33 | 277 | 277.78 | -0.28% |
| 34 | 289 | 277.78 | 4.04% |
| 35 | 248 | 277.78 | -10.72% |