runifS {accuracy}R Documentation

Function to return TRUE (not pseudo) random numbers, based on system and networked entropy collection.

Description

This function makes use of hardware-generated entropy to supply true random numbers. Entropy collection is slow, so its primary use to provide random numbers for cryptographic key generation and for setting the seed value for subsequent PRNG generation.

Usage

        runifT(n,min=0,max=1,maxTries=10,silent=TRUE)
        runifS(n,...,period=10000,maxTries=10,silent=TRUE)
        resetSeed(maxTries=10,silent=TRUE)

Arguments

n number of observations. If 'length(n) > 1', the length is taken to be the number required.
min,max lower and upper limits of the distribution
... pass on to runif
period number of random numbers to generate before reseeding
maxTries number of times to attempt to contact entropy source before giving yp
silent whether to report failures of entropy source generators

Details

runifS returns pseudo-random numbers, reseeding with a true random number every period draws. resetSeed resets R's own PRNG seed, set.seed, supplying a true random number

runifT returns true random numbers in a uniform distribution. This can easily exhaust entropy sources, so for larger samples, runifS is usually preferred.

These routines provides true random numbers by accessing external entropy collectors. Currently entropy can be retrieved from two different sources. (1) The "Hotbits" server http://www.fourmilab.ch/hotbits/ supplies random bytes based on radioactive decay. (2) The bit server on random.org, and (3) On Unix systems, the the kernel gathers environmental noise from device drivers and other sources into an entropy pool, which can be accessed through '/dev/random'.

Entropy is retrieved in blocks from the sources (each source having a different preferred block size). If the sources do not return a block within the R timeout value (see options("timeout") entropy requests will be repeated up to maxTries times per source. If no entropy is available, pseudo random numbers will be returned using runif() (or a seed will be set based on Sys.time, for resetSeed, and a warning issued.

Value

runifS,runifT Returns a vector of uniformly distributed true random numbers. resetSeed returns the status of set.seed()

Author(s)

Micah Altman Micah_Altman@harvard.edu http://www.hmdc.harvard.edu/micah_altman/

References

Altman, M., J. Gill and M. P. McDonald. 2003. Numerical Issues in Statistical Computing for the Social Scientist. John Wiley & Sons. http://www.hmdc.harvard.edu/numerical_issues/

See Also

See Also runif, options, .Random.seed,

Examples

# note, if you are using Windows, you must be on-line
# to get to entropy generator, will fall-back to pseudo-random
# numbers when off-line



# reset the seed for runif() based on a true random value

resetSeed()
y=runif(100000)
ty= table(trunc(5*y))
print(ty)
if (is.R()) {
  chisq.test(ty)
} else {
  chisq.test(t(cbind(as.numeric(names(ty)),as.matrix(ty))))
}

# generate true random values directly (may block for long periods if 
# if entropy pool is empty)
y=runifS(100000)
ty= table(trunc(5*y))
print(ty)
if (is.R()) {
  chisq.test(ty)
} else {
  chisq.test(t(cbind(as.numeric(names(ty)),as.matrix(ty))))
}

## Not run: 
y=runifT(100)
ty= table(trunc(5*y))
print(ty);
chisq.test(ty)
## End(Not run)



[Package accuracy version 1.31 Index]