
import java.util.*;
import java.util.concurrent.*;

public class J7RandomLoops {
    static final long SIZE = 1L << 26;

    public static void main(String[] args) throws Exception {
        for (long size = 1 << 10; size <= SIZE; size <<= 1) {
            t2(size);
            t3(size);
            t2d(size);
            t3d(size);
            t2d(size);
            t3i(size);
        }
        Thread.sleep(1000);
        System.out.println("===============================================");
        for (int i = 0; i < 5; ++i) {
            t2(SIZE);
            t3(SIZE);
            t2d(SIZE);
            t3d(SIZE);
            t2i(SIZE);
            t3i(SIZE);
        }
    }

    static void t2(long size) {
        long sum = 0L;
        long now = System.nanoTime();
        for (int i = 0; i < size; ++i)
            sum += ThreadLocalRandom.current().nextLong();
        double ns = throughput(now, size);
        System.out.printf("L TLR n: %10d mops: %10.1f\n", size, ns);
        if (sum == 0) System.out.println();
    }

    static void t3(long size) {
        Random r = new Random();
        long sum = 0L;
        long now = System.nanoTime();
        for (int i = 0; i < size; ++i)
            sum += r.nextLong();
        double ns = throughput(now, size);
        System.out.printf("L JUR n: %10d mops: %10.1f\n", size, ns);
        if (sum == 0) System.out.println();
    }

    static void t2d(long size) {
        double sum = 0.0;
        long now = System.nanoTime();
        for (int i = 0; i < size; ++i)
            sum += ThreadLocalRandom.current().nextDouble();
        double ns = throughput(now, size);
        System.out.printf("D TLR n: %10d mops: %10.1f\n", size, ns);
        if (sum == 0) System.out.println();
    }

    static void t3d(long size) {
        Random r = new Random();
        double sum = 0.0;
        long now = System.nanoTime();
        for (int i = 0; i < size; ++i)
            sum += r.nextDouble();
        double ns = throughput(now, size);
        System.out.printf("D JUR n: %10d mops: %10.1f\n", size, ns);
        if (sum == 0) System.out.println();
    }

    static void t2i(long size) {
        int sum = 0;
        long now = System.nanoTime();
        for (int i = 0; i < size; ++i)
            sum += ThreadLocalRandom.current().nextInt();
        double ns = throughput(now, size);
        System.out.printf("I TLR n: %10d mops: %10.1f\n", size, ns);
        if (sum == 0) System.out.println();
    }

    static void t3i(long size) {
        Random r = new Random();
        int sum = 0;
        long now = System.nanoTime();
        for (int i = 0; i < size; ++i)
            sum += r.nextInt();
        double ns = throughput(now, size);
        System.out.printf("I JUR n: %10d mops: %10.1f\n", size, ns);
        if (sum == 0) System.out.println();
    }

    static double opTime(long startTime, long nops) {
        return (double)(System.nanoTime() - startTime) / nops;
    }

    static double elapsedTime(long startTime) {
        return (double)(System.nanoTime() - startTime) / (1000L * 1000 * 1000);
    }

    static double throughput(long startTime, long nops) {
        return (nops * 1000L) / (double)(System.nanoTime() - startTime);
    }


}


