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. ______________________________________________ R-help@stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html