# [R] Random numbers

Bob Wheeler rwheeler at echip.com
Wed Dec 21 17:00:11 CET 2005

```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:
http://www.stat.fsu.edu/pub/diehard/

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