看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《apey ()》之銘言: : hi : 以下是我今天面試所遇到的考題, 來這裡請教大家 : a,b是 unsigned int 改下題目 設 a b 是 unsigned short 不然玩不下去 : 最佳化以下兩段程式碼 1 跟 2 : 1.if ( (a/24) > b ) return 1; : 2.a=(b/1024)*10; define MUL2(XX) ( (XX)<<1 ) #define MUL4(XX) ( (XX)<<2 ) #define MUL8(XX) ( (XX)<<3 ) #define MUL16(XX) ( (XX)<<4 ) #define MUL64(XX) ( (XX)<<6 ) #define DIV256(XX) ( (XX)>>8 ) #define MUL86(XX) (MUL64(XX) + MUL16(XX) + MUL4(XX ) + MUL2(XX)) #define DIV3(XX) DIV256(MUL86(XX) ) #define DIV24(XX) DIV3((DIV8(XX))) #define DIV1024(XX) ( (XX)>>10 ) #define MUL10(XX) (MUL2(XX) + MUL8(XX)) #define IS_NEGATIVE(RR) ((RR)&(0x8000)) 1. if( IS_NEGATIVE( DIV24(a ) -b ) ) return 1; 2. a = MUL10( DIV1024(b) ); -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.120.158.204 ※ 編輯: DrStein 來自: 59.120.158.204 (06/14 19:21) firejox:@@為什麼要改成short? 會溢位...
firejox:0x80000000 是4byte耶 06/14 19:33
已更正 ※ 編輯: DrStein 來自: 59.120.158.204 (06/14 19:36)
littleshan:除以3不一定等於乘以85再除以256,拿3代進去算就錯了 06/14 21:35
DrStein:那就變成86吧。。。 06/14 21:51
已修改嚕 ※ 編輯: DrStein 來自: 58.115.132.79 (06/14 21:53)
littleshan:這方法行不通的,你把600代入算看看 06/14 22:26
DrStein:只能得到近似解 ,這沒辦法 06/14 23:02
DrStein:不然只能增加精度 改用16位這類的 06/14 23:03
LPH66:增加精度就是上篇回文的 -1431655765 了啊... 06/15 05:57
※ 編輯: DrStein 來自: 59.120.158.204 (06/15 11:10)