Re: [問題] 面試考題 程式最佳化
※ 引述《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
06/15 11:47, 3F
推
06/15 12:45, , 4F
06/15 12:45, 4F
討論串 (同標題文章)