C-Sharp | Java | Python | Swift | GO | WPF | Ruby | Scala | F# | JavaScript | SQL | PHP | Angular | HTML
Result: The square root of 4 is 2. We see 2.0 because Math.sqrt returns a double.
Tip: For cases when we do not need fractional values, we can cast the result of Math.sqrt to an int.
CastJava program that uses Math.sqrt
public class Program {
public static void main(String[] args) {
// ... Test the sqrt method.
double value = java.lang.Math.sqrt(4);
double value2 = java.lang.Math.sqrt(9);
System.out.println(value);
System.out.println(value2);
}
}
Output
2.0
3.0
Version 1: In this version of the code we call Math.sqrt repeatedly—no caching is used here.
Version 2: We use a double array cache of 100 Math.sqrt values. We access those values many times.
ArrayResult: Accessing array elements is more than ten times faster than calling Math.sqrt each time.
Java program that times Math.sqrt lookup table
public class Program {
public static void main(String[] args) {
// A lookup table for square roots.
double[] cache = new double[100];
long t1 = System.currentTimeMillis();
// Version 1: use Math.sqrt each time.
for (int i = 0; i < 1000000; i++) {
for (int x = 1; x < 100; x++) {
double result = Math.sqrt(x);
if (result == 0) {
return;
}
}
}
long t2 = System.currentTimeMillis();
// Version 2: use lookup table after first time.
for (int i = 0; i < 1000000; i++) {
for (int x = 1; x < 100; x++) {
double result;
if (cache[x] != 0) {
result = cache[x];
} else {
result = Math.sqrt(x);
cache[x] = result;
}
if (result == 0) {
return;
}
}
}
long t3 = System.currentTimeMillis();
// ... Benchmark times.
System.out.println(t2 - t1);
System.out.println(t3 - t2);
}
}
Output
594 ms Math.sqrt
47 ms Cache lookup, Math.sqrt if not found