私は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ビットとして表されます)。整数部分である「値」についても同じことが言えます。'part'がその操作の1つで0xFFFFを超えると、上位16ビットが' value'に追加され、次に、下位16ビットのみが残るようにパーツがマスクされます。これは、初期化リストで行われます。
質問するのは嫌ですが、このようなドキュメントをどこで見つけることができるか、あるいは「トリック」やこれら2つの演算子の実行方法を誰かが知っているなら、私はそれをとても嬉しく思います!私は数学に関してはばかです、そして誰かが以前にこれをしなければならなかったことを知っています、しかしグーグルを検索することは私を約束の地に一度も連れて行かなかった...