int randomNumber = (arc4random() % 83) + 1;
Is this the best way to generate "the most random" number? Or is there a better way to generate a random number?
int randomNumber = (arc4random() % 83) + 1;
Is this the best way to generate "the most random" number? Or is there a better way to generate a random number?
arc4random has a superior algorithm for generating random numbers based on the current time. There are other rand functions but they are not as good and require seeding.
When you use arc4random
you avoid one pitfall of using %
with linear congruential generators (which is the usual algorithm used by rand
): the low-order bits aren't less random.
However, you still have truncation issues: i.e., because (1 << 32) % 83
is 77, that means that numbers between 0 and 76 appear (slightly) more frequently than numbers between 77 and 82. To avoid this, you should throw away the incoming value (i.e., call arc4random
again) if it's above (1 << 32) / 83 * 83
.
(I assume the range of arc4random
is from 0 to 232-1. Adjust the above explanation accordingly.)
The best random number generator I've ever seen (as well as a very clear definition of what random means) can be found in Stephen Wolfram's A New Kind of Science. He's been using a very simple cellular automata as his random number generator for decades in his Mathematica software program so it's been extremely well tested.