Re: [問題] 面試考題 程式最佳化

看板C_and_CPP作者 (Alien)時間13年前 (2011/06/15 08:41), 編輯推噓2(202)
留言4則, 4人參與, 最新討論串6/10 (看更多)
※ 引述《Zephyr750 (紅蓮西風750)》之銘言: : ※ 引述《apey ()》之銘言: : : hi : : 以下是我今天面試所遇到的考題, 來這裡請教大家 : : a,b是 unsigned int : : 最佳化以下兩段程式碼 1 跟 2 : : 1.if ( (a/24) > b ) return 1; : : 2.a=(b/1024)*10; : 1. : return (a/24)>b; : 2. : a=b*0.9765625; 或 a=b/102.4; 先不談是不是真的有最佳化,你的改動甚至和原本的 code 的運作結果 根本就連吻合也談不上: 1) 本來的 code 是 a/24 <=b 的話會繼續向下跑,你改成必定 return。 如果原本的 code 後面是這樣的,你應該會明白問題出在哪了: if ( (a/24) > b ) return 1; printf("Blablabla"); doSomeMoreThing(); return 10000; 2) 浮點數運算一向都比整數運算慢,我很難相信你這樣改真的快了...。 另外每做浮點運算都要記得浮點數只是近似值,要 output 或轉為 integer 都要小心處理。 我不肯定浮點運算 /1024.0 * 10.0 會不會剛好不用做下面的東西 不過良好的習慣是一定要做: const double EPSILON = 0.0000005; //視乎 app .... a = b / 102.4 + EPSILON; -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 183.179.61.91

06/15 09:13, , 1F
乾脆叫出題的把整份程式都給出來就好啦~ (煙
06/15 09:13, 1F

06/15 09:46, , 2F
乾脆把出考題的人叫過來好了...
06/15 09:46, 2F

06/15 11:47, , 3F
出題者: 我可以領便當了嘛? XD
06/15 11:47, 3F

06/15 12:45, , 4F
原題2的a似乎一定是10的倍數…?
06/15 12:45, 4F
文章代碼(AID): #1Dz_-jo6 (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1Dz_-jo6 (C_and_CPP)