library(methods) dyn.load('tausR.so') TauswortheRNG <- setRefClass('TauswortheRNG', fields=list( seed='numeric', state='numeric' ), methods=list( initialize=function(..., seed=0) { seed <<- seed tmp <- .Call('R_tausworthe_seed', as.integer(seed)) state <<- tmp[1:4] callSuper(...) }, randi=function() { tmp <- .Call('R_tausworthe_rand', as.integer(state)) state <<- tmp[1:4] return(tmp[5]) }, rand=function() { r <- randi() return (r * 2.3283064365387e-10) } ) ) taus.seed <- function(seed=0) { t <- TauswortheRNG(seed=seed) return(t) } taus.rand <- function(t) { return(t$rand()) } taus.randi <- function(t) { return(t$randi()) } test.randi <- function() { t <- TauswortheRNG(seed=112339) for (i in 1:1000000) { cat(t$randi(), "\n") } } test.randi()