Whenever I run the following program the returned values are always 6 or 13.
#include <iostream>
#include <fstream>
#include <ctime>
#include <cstdlib>
using namespace std;
//void randomLegs();
//void randomPush();
//void randomPull();
//void randomMisc();
int main(int argc, const char * argv[])
{
srand(time(NULL));
//randomLegs();
cout << rand() % 14;
return 0;
}
I have run the program close to a hundred times during today and yesterday.
Can anyone tell me what I'm doing wrong?
Thank you.
EDIT: By the way, if I change the range of rand() to say 13 or 15 it works just fine.
Per wikipedia, the multiplier being used in Apple's MCG random number generator is 16807. This is divisible by 7, so the first random number produced after
srand()
will have only one bit of entropymod 14
(that is, it can only take on two values).It's a crappy RNG they've got there. An easy solution, though, is just to call
rand()
a few times right aftersrand
, and discard the results.I can reproduce the problem on Mac OS X 10.9 with Xcode 5 - it looks like it might actually be a bug, or at least a limitation with
rand()
/srand()
on OS X 10.9.I recommend you use arc4random() instead, which works a lot better than
rand()
, and which doesn't require that you randomize the seed:Test:
rand() % 14
is often a poor random number generator. You'll probably get better results with this