拉風(fēng)的咖菲貓
2019-03-29 22:19:12
我寫(xiě)了一個(gè)簡(jiǎn)單,其中一個(gè)看似普通的循環(huán)卻出乎了我的意料,是用Java寫(xiě)的。其中yz及pow的底數(shù)我現(xiàn)在改了一下://方法一:
double w = 0.0, yz = 1.234567;
for (int i = 0; i < currents.length; i++) {
if (currents[i] > i2) {
w += yz * currents[i] * Math.pow(1.56, i0/currents[i]);
}
}
return w;
//方法二:
double w = 0.0, yz = 1.234567;
for (int i = pMax; i < currents.length; i++) {
w += yz * currents[i] * Math.pow(0.89, i0/currents[i]);
}
return w; 代碼如上,現(xiàn)在問(wèn)題就是照我的理解方法二應(yīng)該比方法一快一些才對(duì),而進(jìn)行了測(cè)試方法一需要114ms,方法二需要333ms(進(jìn)行了多次測(cè)試取平均)我現(xiàn)在不知道到底是什么原因,所以上來(lái)請(qǐng)教討論一下,謝謝各位!- -||| 沒(méi)分
3 回答

萬(wàn)千封印
TA貢獻(xiàn)1891條經(jīng)驗(yàn) 獲得超3個(gè)贊
方法一中的if (currents[i] > i2) 這句,滿(mǎn)足這個(gè)條件才會(huì)進(jìn)去計(jì)算。

富國(guó)滬深
TA貢獻(xiàn)1790條經(jīng)驗(yàn) 獲得超9個(gè)贊
兩個(gè)方法所消耗的時(shí)間主要是用在計(jì)算上面,雖然第一個(gè)if判斷比第二多,但是他真正計(jì)算的時(shí)間比第二方法少,總體來(lái)看肯定是第一個(gè)方法時(shí)間消耗少。其實(shí)你可以通過(guò)循環(huán)的次數(shù)從小到大,依次去比較兩個(gè)方法消耗的時(shí)間,應(yīng)該可以畫(huà)出一個(gè)正太分布圖??隙〞?huì)有一個(gè)臨界點(diǎn),兩個(gè)方法的時(shí)間一樣,通過(guò)這個(gè)可以分析出你想要的結(jié)果
添加回答
舉報(bào)
0/150
提交
取消