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-08-31
  • Download CSV (100,000 spin rows)
SegmentsSpinsχ²dfCritical 0.05ResultMax deviation
210,0000.705613.841pass0.84%
310,0003.458625.991pass2.63%
410,0002.515237.815pass2.32%
610,00010.8068511.07pass6.7%
810,00010.3584714.067pass6.08%
1010,00014.476916.919pass7.5%
1210,00011.18721119.675pass6.08%
1610,00019.15841525pass11.2%
2010,0009.6561930.144pass7.2%
3610,00041.52323549.998pass11.8%

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

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

Slice indexObservedExpectedDeviation %
049585000-0.84%
1504250000.84%

3 segments, 10,000 spins

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

Slice indexObservedExpectedDeviation %
032893333.33-1.33%
134213333.332.63%
232903333.33-1.3%

4 segments, 10,000 spins

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

Slice indexObservedExpectedDeviation %
0255425002.16%
124422500-2.32%
2250225000.08%
3250225000.08%

6 segments, 10,000 spins

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

Slice indexObservedExpectedDeviation %
016991666.671.94%
116711666.670.26%
216571666.67-0.58%
316891666.671.34%
417291666.673.74%
515551666.67-6.7%

8 segments, 10,000 spins

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

Slice indexObservedExpectedDeviation %
0132612506.08%
1128612502.88%
2125212500.16%
311851250-5.2%
4125212500.16%
5125512500.4%
612171250-2.64%
712271250-1.84%

10 segments, 10,000 spins

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

Slice indexObservedExpectedDeviation %
09971000-0.3%
19641000-3.6%
29251000-7.5%
3100210000.2%
4105410005.4%
5104410004.4%
69801000-2%
79761000-2.4%
8103310003.3%
9102510002.5%

12 segments, 10,000 spins

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

Slice indexObservedExpectedDeviation %
0872833.334.64%
1806833.33-3.28%
2805833.33-3.4%
3850833.332%
4826833.33-0.88%
5804833.33-3.52%
6884833.336.08%
7845833.331.4%
8791833.33-5.08%
9850833.332%
10821833.33-1.48%
11846833.331.52%

16 segments, 10,000 spins

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

Slice indexObservedExpectedDeviation %
0602625-3.68%
1624625-0.16%
26366251.76%
36276250.32%
46336251.28%
56266250.16%
66306250.8%
76686256.88%
8623625-0.32%
96666256.56%
106296250.64%
11592625-5.28%
12555625-11.2%
136586255.28%
146306250.8%
15601625-3.84%

20 segments, 10,000 spins

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

Slice indexObservedExpectedDeviation %
0494500-1.2%
15075001.4%
2476500-4.8%
35175003.4%
4479500-4.2%
5495500-1%
65125002.4%
75365007.2%
85115002.2%
9498500-0.4%
105025000.4%
11491500-1.8%
125195003.8%
135035000.6%
145015000.2%
15469500-6.2%
165065001.2%
17487500-2.6%
18488500-2.4%
195095001.8%

36 segments, 10,000 spins

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

Slice indexObservedExpectedDeviation %
0252277.78-9.28%
1282277.781.52%
2284277.782.24%
3290277.784.4%
4267277.78-3.88%
5280277.780.8%
6252277.78-9.28%
7298277.787.28%
8260277.78-6.4%
9245277.78-11.8%
10245277.78-11.8%
11278277.780.08%
12300277.788%
13289277.784.04%
14293277.785.48%
15286277.782.96%
16281277.781.16%
17293277.785.48%
18275277.78-1%
19258277.78-7.12%
20295277.786.2%
21261277.78-6.04%
22286277.782.96%
23299277.787.64%
24274277.78-1.36%
25298277.787.28%
26305277.789.8%
27300277.788%
28264277.78-4.96%
29282277.781.52%
30306277.7810.16%
31249277.78-10.36%
32267277.78-3.88%
33251277.78-9.64%
34274277.78-1.36%
35281277.781.16%

Related