Strange performance behaviour
- by plastilino
I'm puzzled with this.
In my machine
Direct calculation: 375 ms
Method calculation: 3594 ms, about TEN times SLOWER
If I place the method calulation BEFORE the direct calculation, both times are SIMILAR.
Woud you check it in your machine?
class Test {
static long COUNT = 50000 * 10000;
private static long BEFORE;
/*--------METHOD---------*/
public static final double hypotenuse(double a, double b) {
return Math.sqrt(a * a + b * b);
}
/*--------TIMER---------*/
public static void getTime(String text) {
if (BEFORE == 0) {
BEFORE = System.currentTimeMillis();
return;
}
long now = System.currentTimeMillis();
long elapsed = (now - BEFORE);
BEFORE = System.currentTimeMillis();
if (text.equals("")) {
return;
}
String message = "\r\n" + text + "\r\n" + "Elapsed time: " + elapsed + " ms";
System.out.println(message);
}
public static void main(String[] args) {
double a = 0.2223221101;
double b = 122333.167;
getTime("");
/*--------DIRECT CALCULATION---------*/
for (int i = 1; i < COUNT; i++) {
Math.sqrt(a * a + b * b);
}
getTime("Direct: ");
/*--------METHOD---------*/
for (int k = 1; k < COUNT; k++) {
hypotenuse(a, b);
}
getTime("Method: ");
}
}