Loading...

algogeeks@googlegroups.com

[Prev] Thread [Next]  |  [Prev] Date [Next]

Re: [algogeeks] Re: Pbm with rand() function Prakash D Mon Feb 27 22:00:39 2012

with equal probability

On Tue, Feb 28, 2012 at 5:28 AM, 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 at 
>> http://groups.google.com/group/algogeeks?hl=en.
>>

-- 
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.