假設這麼多:
我正在使用16.16定點系統。
系統是32位。
CPU沒有浮點處理器。
對於任何大於1.0的任何乘法,溢出相當迫在眉睫* 0.4999定點乘法「解決方案」,瘋狂還是可行?
最後一個假設......可以說我正在工作的值不會太高,導致此操作溢出......
//assume that in practical application
//this assignment wouldn't be here as 2 fixed values would already exist...
fixed1 = (int)(1.2341 * 65536);
fixed2 = (int)(0.7854 * 65536);
mask1 = fixed1 & 0xFF; //mask off lower 8 bits
fixed1 >>= 8; //keep upper 24 bits... assume value here isn't too large...
answer = (((fixed2 * fixed1) >> 8) + ((fixed2 * mask1) >> 16));
所以,問題是......這是神來之筆(不是說出來的尚未想到的或任何東西),或者完全是浪費時間?
嗯,我一個人不明白你在這裏要做什麼。 您是否試圖在沒有浮點處理器的32位計算機上將1.2341乘以0.7854,但是所有數字都是固定的,以便前16位爲小數點前,而後16位爲小數點後? – ChrisBD 2010-05-26 15:26:33