【发布时间】:2016-12-17 18:44:11
【问题描述】:
我在 Leetcode 上实现了一个 sn-p,我的初始循环是这样运行的:
//n and x are an integer and a double respectively
long N = Math.abs((long)n);
double result = 1;
while(N != 0){
if((N & 1) == 1){
result *= x;
}
N = N >> 1;
x *= x;
}
整个代码运行时间为 2 毫秒。然后我将N != 0 更改为N > 0,代码运行了1ms。为什么由于此更改而导致运行时跳跃?也就是说,Java是如何实现x != y和x > y的?
【问题讨论】:
-
你只测试过一次吗?每次执行之间会有时间差异,结果并不是说在性能方面存在重大差异。这只是一个标准的“这次花了 x 毫秒”,下次可能是 vica verse。
-
我认为这个缺陷可能在你的测试中......
-
写micro-benchmarks in Java 比你想象的要难得多。你的测量没有你想象的那么精确。
-
凯文是对的。在运行了更多测试之后,这两个波动的运行时间看起来都在 1ms 和 2ms 之间。我认为 Leetcode 提供了作为官方运行时的运行时上限,而实际运行时必须一直徘徊在 1ms 左右(所以是 1ms 和 2ms)。谢谢!
标签: java conditional