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)
SegmentsSpinsχ²dfCritical 0.05ResultMax deviation
210,0001.904413.841pass1.38%
310,0002.559825.991pass2.17%
410,0006.023237.815pass3.28%
610,0002.9768511.07pass3.68%
810,0002.9072714.067pass3.36%
1010,0004.494916.919pass3.7%
1210,0006.32721119.675pass4.52%
1610,00017.6641525pass8.8%
2010,00017.5281930.144pass8%
3610,00030.73043549.998pass13.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 indexObservedExpectedDeviation %
0506950001.38%
149315000-1.38%

3 segments, 10,000 spins

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

Slice indexObservedExpectedDeviation %
032613333.33-2.17%
133883333.331.64%
233513333.330.53%

4 segments, 10,000 spins

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

Slice indexObservedExpectedDeviation %
0253425001.36%
1258225003.28%
224572500-1.72%
324272500-2.92%

6 segments, 10,000 spins

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

Slice indexObservedExpectedDeviation %
016491666.67-1.06%
116571666.67-0.58%
216711666.670.26%
317281666.673.68%
416431666.67-1.42%
516521666.67-0.88%

8 segments, 10,000 spins

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

Slice indexObservedExpectedDeviation %
012081250-3.36%
112461250-0.32%
212401250-0.8%
3125312500.24%
4127412501.92%
512471250-0.24%
6128412502.72%
712481250-0.16%

10 segments, 10,000 spins

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

Slice indexObservedExpectedDeviation %
09631000-3.7%
19961000-0.4%
2103110003.1%
3102510002.5%
4102310002.3%
5100010000%
69831000-1.7%
7101110001.1%
89781000-2.2%
99901000-1%

12 segments, 10,000 spins

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

Slice indexObservedExpectedDeviation %
0850833.332%
1799833.33-4.12%
2813833.33-2.44%
3829833.33-0.52%
4840833.330.8%
5837833.330.44%
6856833.332.72%
7871833.334.52%
8856833.332.72%
9816833.33-2.08%
10819833.33-1.72%
11814833.33-2.32%

16 segments, 10,000 spins

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

Slice indexObservedExpectedDeviation %
06446253.04%
16596255.44%
26306250.8%
3591625-5.44%
4616625-1.44%
56696257.04%
66436252.88%
7606625-3.04%
86286250.48%
96506254%
10611625-2.24%
11609625-2.56%
12570625-8.8%
13593625-5.12%
146376251.92%
156446253.04%

20 segments, 10,000 spins

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

Slice indexObservedExpectedDeviation %
0468500-6.4%
1497500-0.6%
25065001.2%
35035000.6%
45295005.8%
55195003.8%
65075001.4%
7490500-2%
85405008%
9489500-2.2%
105175003.4%
11461500-7.8%
12483500-3.4%
135105002%
14486500-2.8%
15463500-7.4%
16495500-1%
17498500-0.4%
185255005%
195145002.8%

36 segments, 10,000 spins

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

Slice indexObservedExpectedDeviation %
0299277.787.64%
1267277.78-3.88%
2272277.78-2.08%
3288277.783.68%
4287277.783.32%
5276277.78-0.64%
6277277.78-0.28%
7262277.78-5.68%
8270277.78-2.8%
9254277.78-8.56%
10282277.781.52%
11283277.781.88%
12297277.786.92%
13293277.785.48%
14253277.78-8.92%
15281277.781.16%
16240277.78-13.6%
17266277.78-4.24%
18266277.78-4.24%
19293277.785.48%
20274277.78-1.36%
21276277.78-0.64%
22291277.784.76%
23290277.784.4%
24298277.787.28%
25287277.783.32%
26297277.786.92%
27256277.78-7.84%
28267277.78-3.88%
29287277.783.32%
30295277.786.2%
31296277.786.56%
32266277.78-4.24%
33277277.78-0.28%
34289277.784.04%
35248277.78-10.72%

Related