rand()
and then apply Von Neumann method.The codes are as follows:
Code for generating one random number:
#include <stdio.h> #include <math.h> #include <stdlib.h> /*Von Neumann Algorithm*/ /*Programmers: Gursharn, Smruti, Shwetab, Sagnika, Kaustav*/ /*Date: Aug 14, 2010*/ unsigned long int randm(int n); unsigned long int von(unsigned long int x, int n); int main(void) { unsigned long int x, s; int n; printf("Enter the number of digits in the seed value "); scanf("%d",&n); if (n >= 10){ printf("TOO LARGE!!"); exit(0); } x = randm(n); printf("\nRandom Number generated: %lu\n",von(x,n)); return 0; } /*Generating Random Number of desired digit*/ unsigned long int randm(int n) { double x; unsigned long int y; srand(getpid()); x = rand()/(double)RAND_MAX; y =(int) (x * pow(10.0,(double) n)); return y; } /*Calculating Random Number By Von Neumann method*/ unsigned long int von(unsigned long int x, int n) { unsigned long int y; int k; k = n/2; y = (int)((x/pow(10.0, k * 1.0)) * x); y = y % (int) (pow(10.0, n * 1.0)); return y; }
Code for generating sequence of random number:
#include <stdio.h> #include <math.h> #include <stdlib.h> /*Von Neumann Algorithm To Generate Several Random Numbers*/ /*Programmers: Gursharn, Smruti, Shwetab, Sagnika, Kaustav*/ /*Date: Aug 14, 2010*/ unsigned long long int randm(int n); unsigned long long int von(unsigned long long int x, int n); int main(void) { unsigned long long int x, s; int n, i, r; printf("Enter the number of digits in the seed value "); scanf("%d",&n); printf("Enter the total number of random numbers to be generated "); scanf("%d",&r); if (n >=12){ printf("TOO LARGE!!"); exit(0); } x = randm(n); for(i = 0; i < r; i++){ s = von(x,n); x = s; printf("\nRandom Number generated: %lld\n",s); } return 0; } /*Generating Random Number of desired digit*/ unsigned long long int randm(int n) { double x; unsigned long long int y; srand(getpid()); x = rand()/(double)RAND_MAX; y =(unsigned long long int) (x * pow(10.0, n*1.0)); return y; } /*Calculating Random Number By Von Neumann method*/ unsigned long long int von(unsigned long long int x, int n) { unsigned long long int y; int k; k = n/2; y =(unsigned long long int)((x/pow(10.0, k * 1.0)) * x) % (unsigned long long int) (pow(10.0, n * 1.0)); return y; }
runif()
.#von neumann algorithm von <- function(n){ m <- floor(runif(1) * 10^n) k <- m * m i <- floor(n/2) t <- (k %/% (10^i)) %% (10^n) t } digit.sep <- function(x){ n = nchar(x) x <- as.numeric(x) y <- rep(0, n) for(i in 1: n) y[i] = (x %/% (10 ^(n-i))) - 10* (x %/% (10^(n-i+1) )) y } plot.von <- function(n){ x <- matrix(0, nrow= n, ncol = 5) for(i in 1:n){ t <- von(5) x[i, (6 - nchar(t)):5] <- digit.sep(t) } a <- rep(0,10) for(i in 1:10) a[i] = sum(x == (i-1)) a = a/(n * 5) barplot(a, xlab = "digits", ylab = "Relative Frequency") }