看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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