10 進数から IEEE 745 浮動小数点単精度に変換するにはどうすればよいですか? 0.5 や 0.75 などの小さな数値を扱うことができます。私の問題は、小さな数値をどう処理すればよいかわからないことです。例えば、
12.1325 * 10^-13
10 進数から IEEE 745 浮動小数点単精度に変換するにはどうすればよいですか? 0.5 や 0.75 などの小さな数値を扱うことができます。私の問題は、小さな数値をどう処理すればよいかわからないことです。例えば、
12.1325 * 10^-13
難しさは、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
(後者の方法については、私の記事「大きな整数を使用した浮動小数点への小数の修正」を参照してください。)