package com.jwetherell.algorithms.mathematics.timing;
import java.text.DecimalFormat;
import com.jwetherell.algorithms.mathematics.Division;
import com.jwetherell.algorithms.mathematics.Multiplication;
public class MathematicsTiming {
private static final DecimalFormat FORMAT = new DecimalFormat("#.######");
public static void main(String[] args) {
// MULTIPLICATION
{
final int a = 1200;
final int b = 1400;
System.out.println("Multiplication using a loop.");
long before = System.nanoTime();
long result = Multiplication.multiplyUsingLoop(a, b);
long after = System.nanoTime();
long check = Multiplication.multiplication(a, b);
if (result != check)
System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check);
System.out.println("Computed in " + FORMAT.format(after - before) + " ns");
System.gc();
System.out.println("Multiplication using recursion.");
before = System.nanoTime();
result = Multiplication.multiplyUsingRecursion(a, b);
after = System.nanoTime();
check = Multiplication.multiplication(a, b);
if (result != check)
System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check);
System.out.println("Computed in " + FORMAT.format(after - before) + " ns");
System.gc();
System.out.println("Multiplication using shifts.");
before = System.nanoTime();
result = Multiplication.multiplyUsingShift(a, b);
after = System.nanoTime();
check = Multiplication.multiplication(a, b);
if (result != check)
System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check);
System.out.println("Computed in " + FORMAT.format(after - before) + " ns");
System.gc();
System.out.println("Multiplication using logs.");
before = System.nanoTime();
result = Multiplication.multiplyUsingLogs(a, b);
after = System.nanoTime();
check = Multiplication.multiplication(a, b);
if (result != check)
System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check);
System.out.println("Computed in " + FORMAT.format(after - before) + " ns");
System.gc();
System.out.println("Multiplication using FFT.");
before = System.nanoTime();
result = Long.parseLong(Multiplication.multiplyUsingFFT(String.valueOf(a), String.valueOf(b)));
after = System.nanoTime();
check = Multiplication.multiplication(a, b);
if (result != check)
System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check);
System.out.println("Computed in " + FORMAT.format(after - before) + " ns");
System.gc();
System.out.println("Multiplication using loop, String input.");
before = System.nanoTime();
result = Long.parseLong(Multiplication.multiplyUsingLoopWithStringInput(String.valueOf(a), String.valueOf(b)));
after = System.nanoTime();
check = Multiplication.multiplication(a, b);
if (result != check)
System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check);
System.out.println("Computed in " + FORMAT.format(after - before) + " ns");
System.gc();
System.out.println("Multiplication using loop, Integer input.");
before = System.nanoTime();
result = Multiplication.multiplyUsingLoopWithIntegerInput(a, b);
after = System.nanoTime();
check = Multiplication.multiplication(a, b);
if (result != check)
System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check);
System.out.println("Computed in " + FORMAT.format(after - before) + " ns");
System.out.println();
System.gc();
}
{
final int a = -7400;
final int b = 6200;
System.out.println("Multiplication using a loop.");
long before = System.nanoTime();
long result = Multiplication.multiplyUsingLoop(a, b);
long after = System.nanoTime();
long check = Multiplication.multiplication(a, b);
if (result != check)
System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check);
System.out.println("Computed in " + FORMAT.format(after - before) + " ns");
System.gc();
System.out.println("Multiplication using recursion.");
before = System.nanoTime();
result = Multiplication.multiplyUsingRecursion(a, b);
after = System.nanoTime();
check = Multiplication.multiplication(a, b);
if (result != check)
System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check);
System.out.println("Computed in " + FORMAT.format(after - before) + " ns");
System.gc();
System.out.println("Multiplication using shifts.");
before = System.nanoTime();
result = Multiplication.multiplyUsingShift(a, b);
after = System.nanoTime();
check = Multiplication.multiplication(a, b);
if (result != check)
System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check);
System.out.println("Computed in " + FORMAT.format(after - before) + " ns");
System.gc();
System.out.println("Multiplication using logs.");
before = System.nanoTime();
result = Multiplication.multiplyUsingLogs(a, b);
after = System.nanoTime();
check = Multiplication.multiplication(a, b);
if (result != check)
System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check);
System.out.println("Computed in " + FORMAT.format(after - before) + " ns");
System.gc();
System.out.println("Multiplication using FFT.");
before = System.nanoTime();
result = Long.parseLong(Multiplication.multiplyUsingFFT(String.valueOf(a), String.valueOf(b)));
after = System.nanoTime();
check = Multiplication.multiplication(a, b);
if (result != check)
System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check);
System.out.println("Computed in " + FORMAT.format(after - before) + " ns");
System.gc();
System.out.println("Multiplication using loop, String input.");
before = System.nanoTime();
result = Long.parseLong(Multiplication.multiplyUsingLoopWithStringInput(String.valueOf(a), String.valueOf(b)));
after = System.nanoTime();
check = Multiplication.multiplication(a, b);
if (result != check)
System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check);
System.out.println("Computed in " + FORMAT.format(after - before) + " ns");
System.gc();
System.out.println("Multiplication using loop, Integer input.");
before = System.nanoTime();
result = Multiplication.multiplyUsingLoopWithIntegerInput(a, b);
after = System.nanoTime();
check = Multiplication.multiplication(a, b);
if (result != check)
System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check);
System.out.println("Computed in " + FORMAT.format(after - before) + " ns");
System.out.println();
System.gc();
}
{
final int a = 8400;
final int b = -2900;
System.out.println("Multiplication using a loop.");
long before = System.nanoTime();
long result = Multiplication.multiplyUsingLoop(a, b);
long after = System.nanoTime();
long check = Multiplication.multiplication(a, b);
if (result != check)
System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check);
System.out.println("Computed in " + FORMAT.format(after - before) + " ns");
System.gc();
System.out.println("Multiplication using recursion.");
before = System.nanoTime();
result = Multiplication.multiplyUsingRecursion(a, b);
after = System.nanoTime();
check = Multiplication.multiplication(a, b);
if (result != check)
System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check);
System.out.println("Computed in " + FORMAT.format(after - before) + " ns");
System.gc();
System.out.println("Multiplication using shifts.");
before = System.nanoTime();
result = Multiplication.multiplyUsingShift(a, b);
after = System.nanoTime();
check = Multiplication.multiplication(a, b);
if (result != check)
System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check);
System.out.println("Computed in " + FORMAT.format(after - before) + " ns");
System.gc();
System.out.println("Multiplication using logs.");
before = System.nanoTime();
result = Multiplication.multiplyUsingLogs(a, b);
after = System.nanoTime();
check = Multiplication.multiplication(a, b);
if (result != check)
System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check);
System.out.println("Computed in " + FORMAT.format(after - before) + " ns");
System.gc();
System.out.println("Multiplication using FFT.");
before = System.nanoTime();
result = Long.parseLong(Multiplication.multiplyUsingFFT(String.valueOf(a), String.valueOf(b)));
after = System.nanoTime();
check = Multiplication.multiplication(a, b);
if (result != check)
System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check);
System.out.println("Computed in " + FORMAT.format(after - before) + " ns");
System.gc();
System.out.println("Multiplication using loop, String input.");
before = System.nanoTime();
result = Long.parseLong(Multiplication.multiplyUsingLoopWithStringInput(String.valueOf(a), String.valueOf(b)));
after = System.nanoTime();
check = Multiplication.multiplication(a, b);
if (result != check)
System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check);
System.out.println("Computed in " + FORMAT.format(after - before) + " ns");
System.gc();
System.out.println("Multiplication using loop, Integer input.");
before = System.nanoTime();
result = Multiplication.multiplyUsingLoopWithIntegerInput(a, b);
after = System.nanoTime();
check = Multiplication.multiplication(a, b);
if (result != check)
System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check);
System.out.println("Computed in " + FORMAT.format(after - before) + " ns");
System.out.println();
System.gc();
}
{
final int a = -9200;
final int b = -3700;
System.out.println("Multiplication using a loop.");
long before = System.nanoTime();
long result = Multiplication.multiplyUsingLoop(a, b);
long after = System.nanoTime();
long check = Multiplication.multiplication(a, b);
if (result != check)
System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check);
System.out.println("Computed in " + FORMAT.format(after - before) + " ns");
System.gc();
System.out.println("Multiplication using recursion.");
before = System.nanoTime();
result = Multiplication.multiplyUsingRecursion(a, b);
after = System.nanoTime();
check = Multiplication.multiplication(a, b);
if (result != check)
System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check);
System.out.println("Computed in " + FORMAT.format(after - before) + " ns");
System.gc();
System.out.println("Multiplication using shifts.");
before = System.nanoTime();
result = Multiplication.multiplyUsingShift(a, b);
after = System.nanoTime();
check = Multiplication.multiplication(a, b);
if (result != check)
System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check);
System.out.println("Computed in " + FORMAT.format(after - before) + " ns");
System.gc();
System.out.println("Multiplication using logs.");
before = System.nanoTime();
result = Multiplication.multiplyUsingLogs(a, b);
after = System.nanoTime();
check = Multiplication.multiplication(a, b);
if (result != check)
System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check);
System.out.println("Computed in " + FORMAT.format(after - before) + " ns");
System.gc();
System.out.println("Multiplication using FFT.");
before = System.nanoTime();
result = Long.parseLong(Multiplication.multiplyUsingFFT(String.valueOf(a), String.valueOf(b)));
after = System.nanoTime();
check = Multiplication.multiplication(a, b);
if (result != check)
System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check);
System.out.println("Computed in " + FORMAT.format(after - before) + " ns");
System.gc();
System.out.println("Multiplication using loop, String input.");
before = System.nanoTime();
result = Long.parseLong(Multiplication.multiplyUsingLoopWithStringInput(String.valueOf(a), String.valueOf(b)));
after = System.nanoTime();
check = Multiplication.multiplication(a, b);
if (result != check)
System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check);
System.out.println("Computed in " + FORMAT.format(after - before) + " ns");
System.gc();
System.out.println("Multiplication using loop, Integer input.");
before = System.nanoTime();
result = Multiplication.multiplyUsingLoopWithIntegerInput(a, b);
after = System.nanoTime();
check = Multiplication.multiplication(a, b);
if (result != check)
System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check);
System.out.println("Computed in " + FORMAT.format(after - before) + " ns");
System.out.println();
System.gc();
}
// DIVISION
{
final int a = 9;
final int b = 3;
System.out.println("Division using a loop.");
long before = System.nanoTime();
long result = Division.divisionUsingLoop(a, b);
long after = System.nanoTime();
long check = Division.division(a, b);
if (result != check)
System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check);
System.out.println("Computed in " + FORMAT.format(after - before) + " ns");
System.gc();
System.out.println("Division using recursion.");
before = System.nanoTime();
result = Division.divisionUsingRecursion(a, b);
after = System.nanoTime();
check = Division.division(a, b);
if (result != check)
System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check);
System.out.println("Computed in " + FORMAT.format(after - before) + " ns");
System.gc();
System.out.println("Division using shifts.");
before = System.nanoTime();
result = Division.divisionUsingShift(a, b);
after = System.nanoTime();
check = Division.division(a, b);
if (result != check)
System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check);
System.out.println("Computed in " + FORMAT.format(after - before) + " ns");
System.gc();
System.out.println("Division using logs.");
before = System.nanoTime();
result = Division.divisionUsingLogs(a, b);
after = System.nanoTime();
check = Division.division(a, b);
if (result != check)
System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check);
System.out.println("Computed in " + FORMAT.format(after - before) + " ns");
System.gc();
System.out.println("Division using multiplication.");
before = System.nanoTime();
result = Division.divisionUsingMultiplication(a, b);
after = System.nanoTime();
check = Division.division(a, b);
if (result != check)
System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check);
System.out.println("Computed in " + FORMAT.format(after - before) + " ns");
System.out.println();
System.gc();
}
{
final int a = -54;
final int b = 6;
System.out.println("Division using a loop.");
long before = System.nanoTime();
long result = Division.divisionUsingLoop(a, b);
long after = System.nanoTime();
long check = Division.division(a, b);
if (result != check)
System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check);
System.out.println("Computed in " + FORMAT.format(after - before) + " ns");
System.gc();
System.out.println("Division using recursion.");
before = System.nanoTime();
result = Division.divisionUsingRecursion(a, b);
after = System.nanoTime();
check = Division.division(a, b);
if (result != check)
System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check);
System.out.println("Computed in " + FORMAT.format(after - before) + " ns");
System.gc();
System.out.println("Division using shifts.");
before = System.nanoTime();
result = Division.divisionUsingShift(a, b);
after = System.nanoTime();
check = Division.division(a, b);
if (result != check)
System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check);
System.out.println("Computed in " + FORMAT.format(after - before) + " ns");
System.gc();
System.out.println("Division using logs.");
before = System.nanoTime();
result = Division.divisionUsingLogs(a, b);
after = System.nanoTime();
check = Division.division(a, b);
if (result != check)
System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check);
System.out.println("Computed in " + FORMAT.format(after - before) + " ns");
System.gc();
System.out.println("Division using multiplication.");
before = System.nanoTime();
result = Division.divisionUsingMultiplication(a, b);
after = System.nanoTime();
check = Division.division(a, b);
if (result != check)
System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check);
System.out.println("Computed in " + FORMAT.format(after - before) + " ns");
System.out.println();
System.gc();
}
{
final int a = 98;
final int b = -7;
System.out.println("Division using a loop.");
long before = System.nanoTime();
long result = Division.divisionUsingLoop(a, b);
long after = System.nanoTime();
long check = Division.division(a, b);
if (result != check)
System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check);
System.out.println("Computed in " + FORMAT.format(after - before) + " ns");
System.gc();
System.out.println("Division using recursion.");
before = System.nanoTime();
result = Division.divisionUsingRecursion(a, b);
after = System.nanoTime();
check = Division.division(a, b);
if (result != check)
System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check);
System.out.println("Computed in " + FORMAT.format(after - before) + " ns");
System.gc();
System.out.println("Division using shifts.");
before = System.nanoTime();
result = Division.divisionUsingShift(a, b);
after = System.nanoTime();
check = Division.division(a, b);
if (result != check)
System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check);
System.out.println("Computed in " + FORMAT.format(after - before) + " ns");
System.gc();
System.out.println("Division using logs.");
before = System.nanoTime();
result = Division.divisionUsingLogs(a, b);
after = System.nanoTime();
check = Division.division(a, b);
if (result != check)
System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check);
System.out.println("Computed in " + FORMAT.format(after - before) + " ns");
System.gc();
System.out.println("Division using multiplication.");
before = System.nanoTime();
result = Division.divisionUsingMultiplication(a, b);
after = System.nanoTime();
check = Division.division(a, b);
if (result != check)
System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check);
System.out.println("Computed in " + FORMAT.format(after - before) + " ns");
System.out.println();
System.gc();
}
{
final int a = -568;
final int b = -15;
System.out.println("Division using a loop.");
long before = System.nanoTime();
long result = Division.divisionUsingLoop(a, b);
long after = System.nanoTime();
long check = Division.division(a, b);
if (result != check)
System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check);
System.out.println("Computed in " + FORMAT.format(after - before) + " ns");
System.gc();
System.out.println("Division using recursion.");
before = System.nanoTime();
result = Division.divisionUsingRecursion(a, b);
after = System.nanoTime();
check = Division.division(a, b);
if (result != check)
System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check);
System.out.println("Computed in " + FORMAT.format(after - before) + " ns");
System.gc();
System.out.println("Division using shifts.");
before = System.nanoTime();
result = Division.divisionUsingShift(a, b);
after = System.nanoTime();
check = Division.division(a, b);
if (result != check)
System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check);
System.out.println("Computed in " + FORMAT.format(after - before) + " ns");
System.gc();
System.out.println("Division using logs.");
before = System.nanoTime();
result = Division.divisionUsingLogs(a, b);
after = System.nanoTime();
check = Division.division(a, b);
if (result != check)
System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check);
System.out.println("Computed in " + FORMAT.format(after - before) + " ns");
System.gc();
System.out.println("Division using multiplication.");
before = System.nanoTime();
result = Division.divisionUsingMultiplication(a, b);
after = System.nanoTime();
check = Division.division(a, b);
if (result != check)
System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check);
System.out.println("Computed in " + FORMAT.format(after - before) + " ns");
System.out.println();
System.gc();
}
}
}