Use Mersenne Twister to generate 32-bit integers and do something like this:
long long x = MT.gen(); x = (x<<32) + MT.gen(); Don On Feb 27, 5:58 pm, Prakash D <[email protected]> wrote: > i've another doubt. what to do when I need to generate a random long long? > > > > On Mon, Feb 27, 2012 at 9:07 PM, Don <[email protected]> wrote: > > For instance, if RANDMAX= 32768, then > > > x = rand() % 20000; > > > is twice as likely to result in the value 10,000 as the value 15,000. > > This is because there are two output values from rand() which result > > in x=10000 (10000 and 30000), but only one output value from rand() > > resulting in x=15000 (15000). > > > For any case where the statistical quality of the pseudo-random stream > > is important, such as simulation, using the built-in rand() function > > is not a good idea. Use a pseudo-random algorithm with much longer > > period and better properties, such as Mersenne Twister. > > > But if you are using rand, it is usually recommended to use the high > > order bits rather than the low order bits. Many implementations of > > rand() have cycles in the low bits which are much shorter than the > > period of the generator. He is one way to generate unbiased values of > > quality as good as the generator can provide: > > > // Return pseudo-random integer in the range 0..n-1 > > int randRange(int n) > > { > > int result, div = RANDMAX / n; > > do { > > result = rand() / div; > > } while(result >= n); > > return result; > > } > > > Don > > > On Feb 26, 10:10 am, karthikeya s <[email protected]> wrote: > >> RAND() func returns value between 1 to INTMAX, as we know. But when > >> smone tries to find out value between 1 to N he takes remainder of o/p > >> of RAND() with N and adds one......but isn't it wrong coz RAND() will > >> generate numbers with equal probability between 1 and INTMAX but > >> taking remainder can alter the prob. of generating numbers..... > >> e.g. > > >> INTMAX=50 > >> N=30 > >> RAND(50) gives numbers 1 to 30, then prob. will remain same but if it > >> gives numbers 31 to 50, they'll be mapped to the numbers 1 to 20, > >> which means probability of getting numbers 1 to 20 is more than the > >> probability for 21 to 30. > > > -- > > You received this message because you are subscribed to the Google Groups > > "Algorithm Geeks" group. > > To post to this group, send email to [email protected]. > > To unsubscribe from this group, send email to > > [email protected]. > > For more options, visit this group > > athttp://groups.google.com/group/algogeeks?hl=en.- Hide quoted text - > > - Show quoted text - -- You received this message because you are subscribed to the Google Groups "Algorithm Geeks" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/algogeeks?hl=en.
