import java.lang.*; import java.util.*; public class RandomTime { private static void useRandom(int n) { Random r = new Random(); int t = 0; long t1 = System.nanoTime(); for (int i = 0; i < n; i++) t += r.nextInt(); long t2 = System.nanoTime(); System.out.println((t2-t1) + " nsec for " + n + " giving " + t); } private static void dblRandom(int n) { Random r = new Random(); double t = 0.0; long t1 = System.nanoTime(); for (int i = 0; i < n; i++) t += r.nextDouble(); long t2 = System.nanoTime(); System.out.println((t2-t1) + " nsec for " + n + " giving " + t); } private static void bulkRandom(int n) { Random r = new Random(); byte[] b = new byte[128]; long t1 = System.nanoTime(); for (int i = 0; i < n; i++) r.nextBytes(b); long t2 = System.nanoTime(); System.out.println((t2-t1) + " nsec for " + n + " giving " + b.toString()); } private static void useRandom48(int n) { Random48 r = new Random48(); int t = 0; long t1 = System.nanoTime(); for (int i = 0; i < n; i++) t += r.nextInt(); long t2 = System.nanoTime(); System.out.println((t2-t1) + " nsec for " + n + " giving " + t); String s = r.toString(); } private static void dblRandom48(int n) { Random48 r = new Random48(); double t = 0.0; long t1 = System.nanoTime(); for (int i = 0; i < n; i++) t += r.nextDouble(); long t2 = System.nanoTime(); System.out.println((t2-t1) + " nsec for " + n + " giving " + t); String s = r.toString(); } private static void bulkRandom48(int n) { Random48 r = new Random48(); byte[] b = new byte[128]; long t1 = System.nanoTime(); for (int i = 0; i < n; i++) r.nextBytes(b); long t2 = System.nanoTime(); System.out.println((t2-t1) + " nsec for " + n + " giving " + b.toString()); } public static void main(String[] args) { System.out.println("ints\n"); useRandom( 1000000); useRandom48( 1000000); useRandom( 10000000); useRandom48( 10000000); useRandom( 100000000); useRandom48(100000000); System.out.println("\ndoubles\n"); dblRandom( 1000000); dblRandom48( 1000000); dblRandom( 10000000); dblRandom48( 10000000); dblRandom( 100000000); dblRandom48(100000000); System.out.println("\nbytes\n"); bulkRandom( 10000); bulkRandom48( 10000); bulkRandom( 100000); bulkRandom48( 100000); bulkRandom( 1000000); bulkRandom48(1000000); } // The results are // 3.3 ns/int // 6.9 ns/double // 0.9 ns/byte (array of 128 bytes) // all running about 5.2 times faster than java.util.Random // Compiled using javac 1.6.0_26 on a 2.66 GHz Intel Core 2 Duo // with 4 GB 1067 MHz DDR3 memory running Mac OS X 10.6.8; // run using java 1.6.0_26 in -server mode on the same machine. }