Greetings, I am trying to write a C++ subroutine of my random number generator. Based on tutorial in Writing R Extensions, one should call GetRNGstate() before and PutRNGstate() after calling R's random variate generation routines. Now suppose my function would generate n(n>1) numbers by a loop, do I need to call these two functions at each iteration? This certainly increases computation burden (although indiscernible in my case). But if I only call them once (outside the loop), will the quality of my random numbers be reduced because of serial correlations in RNG algorithms? I do comparisons between two methods, no significant difference is found. How do you guys write RNG functions? Any other specific reasons? Thanks, -- I am Tib, not Rob. [[alternative HTML version deleted]]
Just one call to each that enclose the RNG calls will do, I believe. Andy From: Tib> > Greetings, > > I am trying to write a C++ subroutine of my random number > generator. Based > on tutorial in Writing R Extensions, one should call > GetRNGstate() before > and PutRNGstate() after calling R's random variate > generation routines. Now > suppose my function would generate n(n>1) numbers by a loop, > do I need to > call these two functions at each iteration? This certainly increases > computation burden (although indiscernible in my case). But > if I only call > them once (outside the loop), will the quality of my random numbers be > reduced because of serial correlations in RNG algorithms? I > do comparisons > between two methods, no significant difference is found. How > do you guys > write RNG functions? Any other specific reasons? Thanks, > > -- > I am Tib, not Rob. > > [[alternative HTML version deleted]] > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel > >
On 1/5/2006 11:44 AM, Tib wrote:> Greetings, > > I am trying to write a C++ subroutine of my random number generator. Based > on tutorial in Writing R Extensions, one should call GetRNGstate() before > and PutRNGstate() after calling R's random variate generation routines. Now > suppose my function would generate n(n>1) numbers by a loop, do I need to > call these two functions at each iteration? This certainly increases > computation burden (although indiscernible in my case). But if I only call > them once (outside the loop), will the quality of my random numbers be > reduced because of serial correlations in RNG algorithms? I do comparisons > between two methods, no significant difference is found. How do you guys > write RNG functions? Any other specific reasons? Thanks,Call them once, outside the loop. What they do is move the RNG state between the R workspace and a place where the C functions can use it. Wrapping each call in the loop in those calls will just generate a lot of unnecessary moves. Not doing the calls, or not pairing them up properly, is the dangerous thing that would lead to damage to the RNG algorithms, because the state would not be updated properly. Duncan Murdoch