看板 Prob_Solve 關於我們 聯絡資訊
※ 引述《previewslave (蝦蝦蝦蝦 來玩圍棋吧)》之銘言: : ※ 引述《previewslave (蝦蝦蝦蝦 來玩圍棋吧)》之銘言: : : for (i=100; i--;) s+= i; : 修正: : for (i=101; i--;) s += i; 把迴圈展開 速度真的會變快說 int sum = 0 ; int N = 1000000000 ; long start,end ; start = System.currentTimeMillis(); for(int i = 0 ; i < N ;){ sum += (i++) ; } end = System.currentTimeMillis(); System.out.println("test1 : (end-start) = "+(end-start)); start = System.currentTimeMillis(); for(int i = 0 ; i < N ;){ sum += (i++) ; sum += (i++) ; sum += (i++) ; sum += (i++) ; sum += (i++) ; sum += (i++) ; sum += (i++) ; sum += (i++) ; sum += (i++) ; sum += (i++) ; } end = System.currentTimeMillis(); System.out.println("test2 : (end-start) = "+(end-start)); 先不管sum會溢位的問題的話 輸出結果是 test1 (end-start) = 2000 test2 (end-start) = 1531 誤差大概到 +- 20 左右 使用的compiler是 java (build 1.6.0_05-b13) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.128.18.137
final01:迴圈展開好像真的比較快~但好像沒人會這樣寫耶 03/31 02:05
yoco315:會有人這樣寫阿,而且好的 compiler 還會自動作這件事情 03/31 23:55
H45:Compiling it by gcj with optimization, it'll be the same. 04/01 04:54
frank99977:把程式做平行計算會比較快嗎? 04/04 18:26