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

看板C_and_CPP作者 (啤酒肚)時間13年前 (2011/06/14 19:20), 編輯推噓3(304)
留言7則, 4人參與, 最新討論串4/10 (看更多)
※ 引述《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? 會溢位...

06/14 19:33, , 1F
0x80000000 是4byte耶
06/14 19:33, 1F
已更正 ※ 編輯: DrStein 來自: 59.120.158.204 (06/14 19:36)

06/14 21:35, , 2F
除以3不一定等於乘以85再除以256,拿3代進去算就錯了
06/14 21:35, 2F

06/14 21:51, , 3F
那就變成86吧。。。
06/14 21:51, 3F
已修改嚕 ※ 編輯: DrStein 來自: 58.115.132.79 (06/14 21:53)

06/14 22:26, , 4F
這方法行不通的,你把600代入算看看
06/14 22:26, 4F

06/14 23:02, , 5F
只能得到近似解 ,這沒辦法
06/14 23:02, 5F

06/14 23:03, , 6F
不然只能增加精度 改用16位這類的
06/14 23:03, 6F

06/15 05:57, , 7F
增加精度就是上篇回文的 -1431655765 了啊...
06/15 05:57, 7F
※ 編輯: DrStein 來自: 59.120.158.204 (06/15 11:10)
文章代碼(AID): #1DzqG88n (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1DzqG88n (C_and_CPP)