SCM

SCM Repository

[rmetrics] Diff of /pkg/randtoolbox/R/runifInterface.R
ViewVC logotype

Diff of /pkg/randtoolbox/R/runifInterface.R

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 4369, Tue Sep 8 05:58:45 2009 UTC revision 4370, Tue Sep 8 17:11:24 2009 UTC
# Line 57  Line 57 
57                          parameters <- c(mod=dots$mod, mult=dots$mult, incr=dots$incr)                          parameters <- c(mod=dots$mod, mult=dots$mult, incr=dots$incr)
58                  }                  }
59                  if (length(parameters) == 0) {                  if (length(parameters) == 0) {
60                          parameters <- c(mod=2147483647, mult=16807, incr=0)                          parameters <- c(mod="2147483647", mult="16807", incr="0")
61                  }                  }
62                  if (!identical(names(parameters), c("mod", "mult", "incr"))) {                  if (!identical(names(parameters), c("mod", "mult", "incr"))) {
63                          param.names <- paste(names(parameters),collapse=" ")                          param.names <- paste(names(parameters),collapse=" ")
# Line 66  Line 66 
66                  if (is.null(seed)) {                  if (is.null(seed)) {
67                          seed <- floor(as.double(parameters["mod"]) * runif(1))                          seed <- floor(as.double(parameters["mod"]) * runif(1))
68                  }                  }
69                    if (is.numeric(parameters)) {
70                            parameters <- formatC(parameters, format="f", digits=0)
71                    }
72                    if (is.numeric(seed)) {
73                            seed <- formatC(seed, format="f", digits=0)
74                    }
75                  state <- c(seed=seed)                  state <- c(seed=seed)
76                  description <- list(name=name, parameters=parameters, state=state)                  description <- list(name=name, parameters=parameters, state=state)
77                  if (only.description) {                  if (only.description) {
# Line 91  Line 97 
97          state <- description$state          state <- description$state
98          if (name == "congruRand") {          if (name == "congruRand") {
99                  aux <- .C("check_state_congru",                  aux <- .C("check_state_congru",
100                          as.double(parameters["mod"]),                          parameters,
101                          as.double(parameters["mult"]),                          state,
                         as.double(parameters["incr"]),  
                         as.double(state["seed"]),  
102                          err = integer(1),                          err = integer(1),
103                          PACKAGE="randtoolbox")                          PACKAGE="randtoolbox")
104                  if (aux$err != 0) {                  if (aux$err != 0) {
# Line 108  Line 112 
112                          as.integer(1),                          as.integer(1),
113                          PACKAGE="randtoolbox")                          PACKAGE="randtoolbox")
114                  .C("put_state_congru",                  .C("put_state_congru",
115                          as.double(parameters["mod"]),                          parameters,
116                          as.double(parameters["mult"]),                          state,
                         as.double(parameters["incr"]),  
                         as.double(state["seed"]),  
117                          PACKAGE="randtoolbox")                          PACKAGE="randtoolbox")
118          } else {          } else {
119                  stop("unsupported generator: ", name)                  stop("unsupported generator: ", name)
# Line 129  Line 131 
131                  PACKAGE="randtoolbox")[[1]]                  PACKAGE="randtoolbox")[[1]]
132          if (generator == 1) {          if (generator == 1) {
133                  name <- "congruRand"                  name <- "congruRand"
134                    outspace <- "18446744073709551616" # 2^64
135                  aux <- .C("get_state_congru",                  aux <- .C("get_state_congru",
136                          mod=double(1),                          parameters=rep(outspace, times=3),
137                          mult=double(1),                          seed=outspace,
                         incr=double(1),  
                         seed=double(1),  
138                          PACKAGE="randtoolbox")                          PACKAGE="randtoolbox")
139                  parameters <- c(mod=aux$mod, mult=aux$mult, incr=aux$incr)                  parameters <- aux$parameters
140                    seed <- aux$seed
141                  state <- c(seed=aux$seed)                  state <- c(seed=aux$seed)
142                    if(parameters[1] == 2^32 && parameters[2] == 1664525 && parameters[3] == 1013904223)                  if(parameters[1] == "4294967296" && parameters[2] == "1664525" && parameters[3] == "1013904223")
143                          literature <- "Knuth - Lewis"                          literature <- "Knuth - Lewis"
144                    else if(parameters[1] == 2^48 && parameters[2] == 31167285 && parameters[3] == 1)                  else if(parameters[1] == "281474976710656" && parameters[2] == "31167285" && parameters[3] == "1")
145                             literature <- "Lavaux - Jenssens"                             literature <- "Lavaux - Jenssens"
146                    else if(parameters[1] == 2^64 && parameters[2] == 636412233846793005 && parameters[3] == 1)                  else if(parameters[1] == "18446744073709551616" && parameters[2] == "636412233846793005" && parameters[3] == "1")
147                             literature <- "Haynes"                             literature <- "Haynes"
148                    else if(parameters[1] == 2^32 && parameters[2] == 69069 && parameters[3] == 0)                  else if(parameters[1] == "4294967296" && parameters[2] == "69069" && parameters[3] == "0")
149                             literature <- "Marsiglia"                          literature <- "Marsaglia"
150                    else if(parameters[1] == 2^31-1 && parameters[2] == 16807 && parameters[3] == 0)                  else if(parameters[1] == "4294967295" && parameters[2] == "16807" && parameters[3] == "0")
151                             literature <- "Park - Miller"                             literature <- "Park - Miller"
152                    else                    else
153                             literature <- "Unknown"                             literature <- "Unknown"

Legend:
Removed from v.4369  
changed lines
  Added in v.4370

root@r-forge.r-project.org
ViewVC Help
Powered by ViewVC 1.0.0  
Thanks to:
Vienna University of Economics and Business Powered By FusionForge