作者DrStein (啤酒肚)
看板C_and_CPP
標題Re: [問題] 面試考題 程式最佳化
時間Tue Jun 14 19:20:37 2011
※ 引述《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)