我正在编写一个 Fixedpoint 类,但遇到了一些障碍......乘法,除法部分,我不知道如何模拟。我对除法运算符进行了非常粗暴的抨击,但我确信这是错误的。这是到目前为止的样子:
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 位。这是在初始化列表中完成的。
我不想问,但如果有人知道我在哪里可以找到这样的文档,甚至只是“技巧”或如何做这两个运算符,我会很高兴的!在数学方面我是个笨蛋,我知道以前有人必须这样做/问过这个问题,但是搜索谷歌一次并没有把我带到应许之地......