3

現在、固定小数点表現で 2 つの数値を乗算する方法を理解しようとしています。

私の数値表現が次のようになっているとします。

[SIGN][2^0].[2^-1][2^-2]..[2^-14]

私の場合、番号10.01000000000000 = -0.25.

たとえば、どのようにします0.25x0.25-0.25x0.25

あなたが助けてくれることを願っています!

4

3 に答える 3

4

より大きなサイズの変数に乗算してから、固定小数点精度のビット数だけ右シフトします。

于 2012-12-23T03:39:26.360 に答える
1

C での簡単な例を次に示します。

int a =  0.25 * (1 << 16);
int b = -0.25 * (1 << 16);
int c = (a * b) >> 16;
printf("%.2f * %.2f = %.2f\n", a / 65536.0, b / 65536.0 , c / 65536.0);

基本的には、すべてを定数で乗算して、小数部を整数範囲に引き上げます。次に、2 つの係数を乗算し、(オプションで) 定数の 1 つで除算して、将来の計算で使用する標準範囲に積を戻します。これは、端数ドルで表された価格に 100 を掛けてからセントで計算するようなものです (つまり、1.95 ドル * 100 セント/ドル = 195 セント)。

乗算先の変数の範囲をオーバーフローしないように注意してください。上記の例の1 << 8代わりに使用するように、オーバーフローを避けるために定数を小さくする必要がある場合があります。1 << 16

于 2013-01-30T20:15:05.667 に答える