1
當測試的答案,我related questions之一,我寫了這個:爲什麼要添加一行計算減少運行時間?
public static long timeDouble(int iters) {
long start = System.currentTimeMillis();
for (; iters >=0; iters--) {
double a = 1.2, b = 2.246, c = 4.4924, d = 8.98488, e = 17.969772;
a = Math.sqrt(a);
b = Math.cos(b);
c = Math.sin(c);
d = Math.tan(d);
e = a + b - c * d/(e + 1);
e = Math.pow(e, e);
}
return System.currentTimeMillis() - start;
}
這種方法的運行時間爲414ms的平均(使用百萬次迭代)。然而,有些東西附身我加入這行:
e = e + d - c * b/(a + 1);
之前e = Math.pow(e, e);
在加入這一行的,爲了計算這種方法的時候下降到平均206毫秒(使用相同的測試條件下)。
這是什麼造成的?
也許'e'的值被這個等式減少了,然後'Math.pow(e,e)'將花費更少的時間來執行。 – 2012-07-11 16:24:45
這可能是由於Math.pow(e,e)使用較少的處理器週期這一事實,也許是由於e較小的事實。 – 2012-07-11 16:25:16
上面的海報可能是正確的,但我通常會偏離這種微基準,它有很多缺陷。 http://www.kdgregory.com/index.php?page=java.microBenchmark – Thor84no 2012-07-11 16:29:12