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-07-14
  • Download CSV (100,000 spin rows)
SegmentsSpinsχ²dfCritical 0.05ResultMax deviation
210,0001.166413.841pass1.08%
310,0001.627425.991pass1.61%
410,0004.578437.815pass3.28%
610,0003.9584511.07pass2.74%
810,0004.1376714.067pass3.68%
1010,0008.004916.919pass5.1%
1210,00019.36161119.675pass9.68%
1610,00019.52961525pass8.64%
2010,00018.51930.144pass8%
3610,00034.68323549.998pass12.52%

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.

2 segments, 10,000 spins

χ² = 1.1664 (df = 1, critical 0.05 = 3.841), uniform (pass) · max deviation 1.08%

Slice indexObservedExpectedDeviation %
049465000-1.08%
1505450001.08%

3 segments, 10,000 spins

χ² = 1.6274 (df = 2, critical 0.05 = 5.991), uniform (pass) · max deviation 1.61%

Slice indexObservedExpectedDeviation %
033303333.33-0.1%
132833333.33-1.51%
233873333.331.61%

4 segments, 10,000 spins

χ² = 4.5784 (df = 3, critical 0.05 = 7.815), uniform (pass) · max deviation 3.28%

Slice indexObservedExpectedDeviation %
024572500-1.72%
124482500-2.08%
2258225003.28%
3251325000.52%

6 segments, 10,000 spins

χ² = 3.9584 (df = 5, critical 0.05 = 11.07), uniform (pass) · max deviation 2.74%

Slice indexObservedExpectedDeviation %
016971666.671.82%
116361666.67-1.84%
216211666.67-2.74%
317011666.672.06%
416461666.67-1.24%
516991666.671.94%

8 segments, 10,000 spins

χ² = 4.1376 (df = 7, critical 0.05 = 14.067), uniform (pass) · max deviation 3.68%

Slice indexObservedExpectedDeviation %
0125112500.08%
112041250-3.68%
212431250-0.56%
3126912501.52%
4127812502.24%
5127412501.92%
612171250-2.64%
7126412501.12%

10 segments, 10,000 spins

χ² = 8.004 (df = 9, critical 0.05 = 16.919), uniform (pass) · max deviation 5.1%

Slice indexObservedExpectedDeviation %
09661000-3.4%
1102510002.5%
2101410001.4%
39541000-4.6%
49951000-0.5%
59681000-3.2%
6105110005.1%
7101210001.2%
8100610000.6%
9100910000.9%

12 segments, 10,000 spins

χ² = 19.3616 (df = 11, critical 0.05 = 19.675), uniform (pass) · max deviation 9.68%

Slice indexObservedExpectedDeviation %
0802833.33-3.76%
1889833.336.68%
2786833.33-5.68%
3801833.33-3.88%
4800833.33-4%
5822833.33-1.36%
6850833.332%
7854833.332.48%
8839833.330.68%
9823833.33-1.24%
10820833.33-1.6%
11914833.339.68%

16 segments, 10,000 spins

χ² = 19.5296 (df = 15, critical 0.05 = 25), uniform (pass) · max deviation 8.64%

Slice indexObservedExpectedDeviation %
06656256.4%
1612625-2.08%
26406252.4%
36486253.68%
46546254.64%
5590625-5.6%
6610625-2.4%
7608625-2.72%
8571625-8.64%
9619625-0.96%
106486253.68%
116266250.16%
12576625-7.84%
136516254.16%
146456253.2%
156376251.92%

20 segments, 10,000 spins

χ² = 18.5 (df = 19, critical 0.05 = 30.144), uniform (pass) · max deviation 8%

Slice indexObservedExpectedDeviation %
0494500-1.2%
1494500-1.2%
2468500-6.4%
3481500-3.8%
45095001.8%
55385007.6%
6493500-1.4%
7472500-5.6%
85095001.8%
9495500-1%
10495500-1%
11462500-7.6%
125405008%
135405008%
14488500-2.4%
15493500-1.4%
165035000.6%
175015000.2%
185045000.8%
195215004.2%

36 segments, 10,000 spins

χ² = 34.6832 (df = 35, critical 0.05 = 49.998), uniform (pass) · max deviation 12.52%

Slice indexObservedExpectedDeviation %
0248277.78-10.72%
1295277.786.2%
2268277.78-3.52%
3270277.78-2.8%
4290277.784.4%
5271277.78-2.44%
6280277.780.8%
7295277.786.2%
8283277.781.88%
9312277.7812.32%
10275277.78-1%
11270277.78-2.8%
12252277.78-9.28%
13298277.787.28%
14274277.78-1.36%
15288277.783.68%
16310277.7811.6%
17280277.780.8%
18256277.78-7.84%
19269277.78-3.16%
20289277.784.04%
21301277.788.36%
22280277.780.8%
23279277.780.44%
24243277.78-12.52%
25288277.783.68%
26253277.78-8.92%
27262277.78-5.68%
28267277.78-3.88%
29272277.78-2.08%
30292277.785.12%
31296277.786.56%
32264277.78-4.96%
33274277.78-1.36%
34276277.78-0.64%
35280277.780.8%

Related