Re: [R] Random numbers

From: Bob Wheeler <>
Date: Thu 22 Dec 2005 - 03:00:11 EST

You can use Marsaglia's multiply with carry. I haven't looked at the C code in R recently, but doubt if it has changed. The C code is very neat, using 6 #defines:

static const double RANDCONST=2.32830643654e-10;

unsigned long zSeed=362436069, wSeed=521288629;

#define zNew  ((zSeed=36969*(zSeed&65535)+(zSeed>>16))<<16)
#define wNew  ((wSeed=18000*(wSeed&65535)+(wSeed>>16))&65535)
#define IUNIFORM  (zNew+wNew)
#define UNIFORM   ((zNew+wNew)*RANDCONST)
#define setseed(A,B) zSeed=(A);wSeed=(B);
#define getseed(A,B) A=zSeed;B=wSeed;

See Marsaglia's DIEHARD page for more details:

Carl wrote:
> Hi All.
> I have R code whose functionality is being replicated within a C+
> program. The outputs are to be compared to validate the conversion
> somewhat - however (as is always the case) I have stuffed my code with
> random number calls.
> Random uniform numbers in C+ are being produced using the (Boost)
> mersenne-twister generators (mt11213b & mt19937) - which is the default
> type of generator in R (if I read things correctly). If it was all
> within R I would just set the seed for reproducibility.
> Basically - how do I specify in C+ for a set of random uniform numbers
> such that they are the same as from R? I have considered the possibility
> of storing/using the R generated random numbers in the C+ version for
> validation purposes - but there are a lot of them, and that strikes me
> as a generally ugly way of doing things.
> thanks in advance
> C

Bob Wheeler ---
    ECHIP, Inc. --- Randomness comes in bunches.

______________________________________________ mailing list
PLEASE do read the posting guide!
Received on Thu Dec 22 03:07:06 2005

This archive was generated by hypermail 2.1.8 : Thu 22 Dec 2005 - 04:28:55 EST