Search code examples
c++randomsrand

Rand() % 14 only generates the values 6 or 13


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.


Solution

  • 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:

    #include <iostream>
    #include <cstdlib>
    
    using namespace std;
    
    int main(int argc, const char * argv[])
    {
        cout << (arc4random() % 14) << endl;
        return 0;
    }
    

    Test:

    $ g++ -Wall -O3 srand.cpp && ./a.out
    5
    $ ./a.out
    8
    $ ./a.out
    0
    $ ./a.out
    8
    $ ./a.out
    11
    $ ./a.out
    8
    $ ./a.out
    3
    $ ./a.out
    13
    $ ./a.out
    9
    $