rand() %4000000000UL giving only small values
c++, random, srand
Solution
rand() generates only numbers up to its RAND_MAX.
According to MSDN, on Windows RAND_MAX is just 32767, or (2**15 - 1) (note that this is the minimal allowed RAND_MAX according to C standard (here link to open group base spec, which is based on C standard)).
If you want bigger numbers, you need to call it more times and bitshift, e.g.:
long long int my_big_random = rand() ^ (rand() << 15) ^ ((long long int) rand() << 30);
(example on codepad).
Problem
I have a question about the following code : ``` #include <iostream> #include <ctime> int main(){ unsigned long int blob; srand(time(0)); for(int counter = 0; counter <= 100; counter++) { blob = rand() % 4000000000UL ; std::cout << blob << std::endl; }//for system("pause"); return 0; } //main ``` On codepad.org it outputs large values like ``` 378332591 1798482639 294846778 1727237195 62560192 1257661042 ``` But on Windows 7 64bits, it outputs only small values (tested compiling on VS11 & Code::Blocks) ``` 10989 13493 13169 18581 17972 29 ``` Thanks in advance for helping a c++ learner ;)