aboutsummaryrefslogtreecommitdiff
path: root/SyncRNG.R
blob: 23be4d26b2a42550e879c3be8c00fea79e0307ea (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
library(methods)

dyn.load('RSyncRNG.so')

SyncRNG <- setRefClass('SyncRNG',
	fields=list(
		    seed='numeric',
		    state='numeric'
		    ),
	methods=list(
		initialize=function(..., seed=0) {
			seed <<- seed
			tmp <- .Call('R_syncrng_seed',
			     as.integer(seed))
			state <<- tmp[1:4]
			callSuper(...)
		},
		randi=function() {
			tmp <- .Call('R_syncrng_rand',
				     as.integer(state))
			state <<- tmp[1:4]
			return(tmp[5])
		},
		rand=function() {
			r <- randi()
			return (r * 2.3283064365387e-10)
		}
		)
	)