我在寫一個定點類,但遇到了一點障礙...乘法,除法部分,我不知道如何模擬。我對師的操作員進行了非常粗魯的刺探,但我相信這是錯誤的。這是它到目前爲止的樣子:C++:仿真定點除法/乘法
class Fixed
{
Fixed(short int _value, short int _part) :
value(long(_value + (_part >> 8))), part(long(_part & 0x0000FFFF)) {};
...
inline Fixed operator -() const // example of some of the bitwise it's doing
{
return Fixed(-value - 1, (~part)&0x0000FFFF);
};
...
inline Fixed operator/(const Fixed & arg) const // example of how I'm probably doing it wrong
{
long int tempInt = value<<8 | part;
long int tempPart = tempInt;
tempInt /= arg.value<<8 | arg.part;
tempPart %= arg.value<<8 | arg.part;
return Fixed(tempInt, tempPart);
};
long int value, part; // members
};
我......我不是一個很好的程序員,哈哈!
該類的「部分」是16位寬(但表示爲長32位,因爲我認爲它需要在可能的溢出之前在它們被固定之前)的空間,並且相同的值爲整數部分。當「部分」在其中一個操作中超過0xFFFF時,最高的16位被添加到「值」,然後該部分被屏蔽,因此只剩下最低的16位。這是在init列表中完成的。我不想問這個問題,但如果有人知道我在哪裏可以找到類似這樣的文檔,甚至只是'訣竅'或如何做這兩個操作員,我會很高興的!我是一個昏昏沉沉的數學,我知道有人不得不這樣做/之前問這個,但搜索谷歌有一次沒有帶我去承諾的土地...
這功課嗎?你基本上試圖模仿浮點數學,但沒有使用浮點數字符號?你看過IEEE如何處理這個問題嗎? – 2011-02-17 12:43:49
@Zac可悲的是,從來沒有去過編程學校或什麼都沒有,因爲你可以告訴!這是一個非常糟糕的嘗試,以避免在我正在做的2D物理引擎中進行浮點運算。但我現在正在搜索IEEE,所以我會看到! – 2011-02-17 12:48:46
@Zac:OP正在談論'固定'點多重分割,而不是'浮動'點,這是有區別的。 http://en.wikipedia.org/wiki/Fixed-point_arithmetic – 2011-02-17 12:50:14