[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.
>
> thanks in advance
> C
>
--
Bob Wheeler --- http://www.bobwheeler.com/
ECHIP, Inc. --- Randomness comes in bunches.
More information about the R-help
mailing list