# [Rd] RNG.c: unif_rand, MARSAGLIA_MULTICARRY (PR#2437)

Richard Simard simardr@IRO.UMontreal.CA
Fri Jan 10 16:51:02 2003

On 9 Jan 2003, Peter Dalgaard BSA wrote:

> simardr@IRO.UMontreal.CA writes:
>
> > Full_Name: Richard Simard
> > Version:
> > OS: Linux
> > Submission from: (NULL) (132.204.25.139)
> >
> >
> > In the random number generator MARSAGLIA_MULTICARRY, your algorithm is
> > different than the one in the original reference that you give in the R manual:
> > Marsaglia in his post to the mailing list {\it sci.stat.math} on September 29,
> > 1997.
> > The last line in the R program has a ^
> > while Marsaglia's algorithm has a +.
> > This gives very different random number generators.
> >
> > The full line in RNG.c is:
> >     return ((I1 << 16)^(I2 & 0177777)) * i2_32m1; /* in [0,1) */
>
> Did you actually try that?
>
> As far as I can see the first operand will be (32-bit binary)
>
> xxxxxxxxxxxxxxxx0000000000000000
>
> and the other one is
>
> 0000000000000000xxxxxxxxxxxxxxxx
>
> so it is the same whether you add them or use bitwise OR or
> bitwise XOR.
>
>

Very sorry, you are right.

Still it is a very bad generator. It would be better to use the
Mersenne-Twister or the Knuth-TAOCP-2002 as the default generator in R.

=================================================
Richard Simard    <simardr@IRO.UMontreal.CA>
Laboratoire de simulation et d'optimisation
Université de Montréal, Dépt. IRO
local: 3342;    tél: 514-343-6111 #3549