3

10進数の2進数と同様に、浮動小数点数も表すことができます。今、私はそれがその種のフロートを持つことができることを読みました

0.50.10.250.010.1250.001...など。しかし、たとえば、0.1(10進数)は2進数でどのように表されますか?

また、10進数の浮動小数点数が与えられた場合、それを同等の10進数に変換する方法(それほど単純ではない場合)。

編集:だから私はより良い質問があったであろうことを理解しています; 10進浮動小数点を2進に変換する方法は?これで、小数部をゼロになるまで乗算することがわかりました。これで、2つの浮動小数点が同じ表現を持つ可能性が非常に高くなりますか?

4

2 に答える 2

6

与えられたビット数は?

0.1b:

0.00011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011...

ご覧のとおり、これは概算です。

Binary                                          Decimal
0.1     == 1/2^1         == 1/2              == 0.5
0.01    == 1/2^2         == 1/4              == 0.25
0.11    == 1/2^1 + 1/2^2 == 1/2 + 1/4 == 3/4 == 0.75

小数点以下の各ビットは1/2^(position_after_bit_string)を表します。

postion:   |1|2|3|4|5|6|7|
         0.|0|0|0|0|0|0|1|

それで0.0000001 = 1/2^7 = 0.0078125

擬似コード:

decimal_value = 0 
for i, bit in enumerate(binary_string):
    if bit == 1
         decimal_value += 1/2**i

詳細情報10進数を2進数で正確に表すことができないのはなぜですか?

于 2012-12-01T19:47:19.320 に答える
0

役立つ可能性のある別の観察。浮動小数点数の「整数部分」は、「通常の」形式でバイナリに存在します。たとえば、値が25.7482の場合、浮動小数点にビット「11001」(25)があり、次のビットは次のようになります。分数(実際には最初の「1」は格納されません。形式で暗示されます)。その数から25.0を引き、10を掛けると、7.482が得られ、その値の整数部分を調べることにより、最初の小数桁「7」を得ることができます。

7.0を引き、10を掛けると、4.82になり、次の桁は「4」になります。浮動小数点形式で正確に表すことができるすべての値は正確な10進表現を持っているため、このプロセスは理論的には最終的にゼロの結果で終了します。ただし、その「正確な」結果は、元の浮動小数点の精度を考えると、実際に妥当な桁数よりもはるかに多くなる可能性があります(とにかく、完全に正確な結果を取得するには、内部で追加の精度が必要になる場合があります。10で乗算する必要があります。丸め誤差を生成しません)。

また、6.432e-200のような数値の場合、この方法は実行可能ですが、あまり効率的ではありません(最初の「6」が現れる前に、199個のゼロを生成します)。

于 2012-12-22T19:44:14.370 に答える