【发布时间】:2012-07-11 07:56:08
【问题描述】:
在测试我的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;
}
此方法的平均运行时间为 414 毫秒(使用 1000000 次迭代)。但是,有些东西让我添加了这一行:
e = e + d - c * b / (a + 1);
紧接在e = Math.pow(e, e);之前加上这行,计算这个方法的时间平均下降到206毫秒(使用相同的测试条件)。
这是什么原因造成的?
【问题讨论】:
-
也许
e的值被该等式减小了,然后Math.pow(e, e)将花费更少的时间来执行。 -
这可能是由于 Math.pow(e, e) 使用较少的处理器周期,可能是由于 e 更小。
-
上面的海报可能是正确的,但我一般会避开这种微基准测试,它有很多陷阱。 kdgregory.com/index.php?page=java.microBenchmark
标签: java