Is the Wheel Fair? Our 1,000,000-Spin Test

A wheel is only useful if everyone believes the result. So here is exactly how this wheel picks a winner, what happened when we ran it 1,000,000 times, and a button to run the test yourself.

How this wheel picks a winner

  1. When you press Spin, the winner is picked first, with crypto.getRandomValues, the random source browsers provide for security.
  2. The pick uses rejection sampling: a random whole number is drawn over the total of all weights, and draws that would favour some slices are thrown away. No slice is ever more likely than its share.
  3. Each entry’s chance equals its slice size. Without weights every slice is the same size; with weights the slices grow or shrink to match, and a “Weighted” label appears above the wheel.
  4. Only then does the animation start. It stops at a random point inside the chosen slice, so the pointer always shows the real result.

Test 1: eight equal slices

1,000,000 spins with the code the site runs (2026-10-04, Node v22.21.0). Every slice should come up 125,000 times on average.

SliceExpectedObservedDifference
Slice 1125,000125,4530.36%
Slice 2125,000125,4520.36%
Slice 3125,000124,753-0.20%
Slice 4125,000124,522-0.38%
Slice 5125,000125,0780.06%
Slice 6125,000125,2460.20%
Slice 7125,000124,749-0.20%
Slice 8125,000124,747-0.20%

Chi-square 7.14 with 7 degrees of freedom, p = 0.414. Largest difference: 0.38%.

Test 2: weights 1, 2, 3 and 4

Four entries with weights 1, 2, 3 and 4 should win 10%, 20%, 30% and 40% of the time.

WeightExpectedObservedDifference
1100,000100,0410.04%
2200,000199,448-0.28%
3300,000299,982-0.01%
4400,000400,5290.13%

Chi-square 2.24 with 3 degrees of freedom, p = 0.524.

Test 3: one hundred slices

1,000,000 spins on a wheel with 100 equal slices. Each should come up 10,000 times. The least picked slice came up 9,802 times and the most picked 10,222 times. Chi-square 87.90 with 99 degrees of freedom, p = 0.780.

All 100 counts, slice by slice:

  1. 9,892
  2. 9,857
  3. 10,040
  4. 9,852
  5. 9,933
  6. 10,133
  7. 10,004
  8. 9,975
  9. 9,866
  10. 10,120
  11. 9,879
  12. 9,979
  13. 10,004
  14. 10,040
  15. 10,006
  16. 9,853
  17. 10,025
  18. 10,071
  19. 9,963
  20. 9,937
  21. 10,173
  22. 10,099
  23. 10,007
  24. 10,031
  25. 10,133
  26. 10,149
  27. 10,055
  28. 9,983
  29. 10,036
  30. 9,969
  31. 10,029
  32. 9,981
  33. 10,130
  34. 10,087
  35. 9,904
  36. 9,919
  37. 10,126
  38. 10,007
  39. 9,938
  40. 10,020
  41. 10,004
  42. 9,869
  43. 10,080
  44. 9,980
  45. 9,933
  46. 9,973
  47. 10,018
  48. 10,073
  49. 9,950
  50. 10,115
  51. 9,818
  52. 9,978
  53. 9,949
  54. 9,910
  55. 10,068
  56. 9,926
  57. 9,853
  58. 10,010
  59. 10,048
  60. 9,844
  61. 9,986
  62. 9,997
  63. 10,060
  64. 10,078
  65. 9,947
  66. 9,947
  67. 9,947
  68. 10,184
  69. 9,889
  70. 10,047
  71. 9,882
  72. 9,995
  73. 9,887
  74. 9,841
  75. 10,145
  76. 10,000
  77. 9,933
  78. 9,856
  79. 9,898
  80. 10,118
  81. 10,030
  82. 10,008
  83. 9,984
  84. 10,222
  85. 9,914
  86. 10,024
  87. 10,044
  88. 10,069
  89. 9,802
  90. 9,997
  91. 9,923
  92. 10,106
  93. 9,919
  94. 10,083
  95. 10,038
  96. 10,187
  97. 10,120
  98. 10,004
  99. 10,174
  100. 10,111

Test 4: does the wheel stop on the winner?

We generated 100,000 random wheels (1 to 200 slices, random weights, random starting angles and spin lengths) and checked that the stopping angle the animation is given always falls inside the slice that was picked. Mismatches: 0. Our browser test also spins the real page and checks that the slice under the pointer is the name in the result window.

What these numbers mean

Random results never match the expected counts exactly; small differences are what fairness looks like. The chi-square test asks whether the differences are bigger than chance would produce. A p-value well above 0.01 means there is no sign of bias. All three tests are well above it.

Run the test yourself

This runs the same picking code in your browser on an eight-slice wheel. Nothing is sent anywhere.

Questions

Can a wheel spinner be rigged?

Yes, any website could be programmed to cheat, so look at how a wheel picks. This one chooses the winner with the browser’s cryptographic random generator before the wheel starts turning, and the only way to change the odds is weights, which change the slice sizes in plain sight and show a “Weighted” label above the wheel.

How accurate is a wheel spinner?

In our test of 1,000,000 spins on eight equal slices, no slice was more than 0.38% away from its expected count, and the chi-square test found no sign of bias (p = 0.41). The wheel also stopped on the chosen slice in all 100,000 landing checks.

Is spin the wheel actually random?

The result comes from crypto.getRandomValues, the random source browsers provide for security. It is not predictable from earlier spins, and every slice gets exactly its share.

Are random wheel generators truly random?

They are as random as the generator behind them. A cryptographic generator like the one used here is unpredictable and evenly spread, which is what a fair draw needs. It is not physical randomness such as dice, but no test can tell the difference in practice.

Is a wheel of names fair?

Only as fair as the code that picks the name, which is why this page shows ours. Every name on our wheel of names has the same chance unless you give it a weight, and a weight is never hidden: the slice grows and a “Weighted” label appears.

Is there a cheat in a wheel of names?

On this one, no. There is no secret setting, no favourite name and no way to steer the result by clicking at the right moment, because the winner is drawn before the wheel moves. The only lever is weights, and they change the picture you see.

Can a wheel of names be manipulated?

Whoever writes a wheel’s code could make it unfair, so trust a wheel that lets you check it. Here you can: the method is described above, the counts are published, and the test runs in your own browser with the same picking code.

How accurate is a wheel of names?

With 100 names on our wheel, each name came up between 9,802 and 10,222 times in 1,000,000 spins, against 10,000 expected. That spread is exactly what chance produces (p = 0.78).

Try a wheel