以下Java程序平均运行时间在0.50秒到0.55秒之间:
public static void main(String[] args) {long startTime = System.nanoTime();int n = 0;for (int i = 0; i < 1000000000; i++) {n += 2 * (i * i);}System.out.println((double) (System.nanoTime() - startTime) / 1000000000 + " s");System.out.println("n = " + n);}
如果我用2 * i * i
替换2 * (i * i)
,运行需要0.60到0.65秒。为什么?
我运行了每个版本的程序15次,在两者之间交替运行。以下是结果:
2*(i*i) │ 2*i*i──────────┼──────────0.5183738 │ 0.62464340.5298337 │ 0.60497220.5308647 │ 0.66033630.5133458 │ 0.62433280.5003011 │ 0.65418020.5366181 │ 0.63126380.515149 │ 0.62411050.5237389 │ 0.6278150.5249942 │ 0.61142520.5641624 │ 0.67810330.538412 │ 0.63939690.5466744 │ 0.66088450.531159 │ 0.62010770.5048032 │ 0.65115590.5232789 │ 0.6544526
2 * i * i
的最快运行时间比2 * (i * i)
的最慢运行时间长。如果他们有相同的效率,这种情况发生的概率会小于1/2^15 * 100% = 0.00305%
。