作者adrianshum (Alien)
看板C_and_CPP
標題Re: [問題] 面試考題 程式最佳化
時間Wed Jun 15 08:41:15 2011
※ 引述《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
→ loveme00835:乾脆叫出題的把整份程式都給出來就好啦~ (煙 06/15 09:13
→ jason12308:乾脆把出考題的人叫過來好了... 06/15 09:46
推 ericinttu:出題者: 我可以領便當了嘛? XD 06/15 11:47
推 kiedveian:原題2的a似乎一定是10的倍數…? 06/15 12:45