| Bill Allombert on Wed, 7 Jun 2000 23:12:57 +0200 (MET DST) |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| Re: random() weirdness |
>>>>>>> Igor wrote:
>? ?random
>random({N=2^31}): random integer between 0 and N-1.
>? setrand(1);random
>1000288896
>? setrand(1);random(2^31)
>1559883374
>How can that be? Is help lying?
Not truly. In fact the function return a random integer uniformly
distributed between 0 and N-1. which requires extra work. If N is not
given, it just return a value from the internal 31 bits RNG , which is
faster.
? #
timer = 1 (on)
? for(i=1,100000,random)
time = 690 ms.
? for(i=1,100000,random(2^31))
time = 1,630 ms.
you can simulate random(2^31) with
gpr()=bitor(bitand(random>>12,(1<<16)-1)<<16,bitand(random>>12,(1<<16)-1))>>1
? setrand(1);gpr()
%67 = 1559883374
? setrand(1);random(2^31)
%68 = 1559883374
Bill.