0

10 進数から IEEE 745 浮動小数点単精度に変換するにはどうすればよいですか? 0.5 や 0.75 などの小さな数値を扱うことができます。私の問題は、小さな数値をどう処理すればよいかわからないことです。例えば、

12.1325 * 10^-13

4

1 に答える 1

0

難しさは、IEEE浮動小数点エンコーディングではなくバイナリ変換であると想定します(0.5と0.75を変換する方法を知っていると言うので)。12.1325 * 10 -13のような簡単ではない例では、バイナリコンバーターを使用します)。70か所まで、0.00000000000121325は

0.0000000000000000000000000000000000000001010101010111111111100000001111 .. ..

(手動で)24の有効ビットに丸められます。つまり、0.00000000000000000000000000000000000000010101010101111111111です。

そこから、これをフロートとしてエンコードするのは簡単です。

これを行う別の方法は分析的です(ただし、 PARI / GPのような優れた任意精度の計算機の助けが必要です)。12.1325 * 10-13を121325/1017と書き直すことから始め、24ビットの分子と2の分母の累乗で最も近い数を見つけようとします。

121325/10 17 = x / 2 n

x =(2 n * 121325)/ 10 17

n = 63を使用すると、目的の値が得られることがわかります。x = 11190256.123714056749056 = 11190256(最も近い整数に丸めた場合)。(11190256 = 101010101011111111110000バイナリで、上記の答えと一致することがわかります。)フロートを正規化すると、指数から23が減算され、次のようになります。1.0101010101111111111 * 2 -40

(後者の方法については、私の記事「大きな整数を使用した浮動小数点への小数の修正」を参照してください。)

于 2011-11-26T03:55:22.823 に答える