繰り返しのバイナリ番号を小数点に変換する(シリーズとして表現?)
-
22-09-2019 - |
質問
0.(0011)または0.0(101)を繰り返すバイナリ番号を考えると、どのように小数に変換するのでしょうか?
私がこれまで掘り下げることができたのは、以下のように、終端バイナリ数を小数に変換するための簡単な方法です。
res(N+2) = res(N+1) / 2 + res(N)
ここで、resはステップnの後の結果であり、nは電流反復(n = 0; n - >(num binary digits))です。それを繰り返し禁止するバイナリ番号に適用すると、たとえば、適切な近似値が得られます。
dec:0.4 || bin: 0.(0110):
0 / 2 + 0 = 0
0 / 2 + 0 = 0
0 / 2 + 1 = 1
1/2 / 2 + 1 = 3/2
3/2 / 2 + 0 = 3/4
3/4 / 2 + 0 = 3/8
3/8 / 2 + 1 = 19/16
19/16 / 2 + 1 = 51/32
51/32 / 2 + 0 = 51/64
51/64 / 2 + 0 = 51/128 = 0.3984
これは約0.4です。
ですから、近似を計算する手段がありますが、これを表現する方法を見つけるのに苦労しています。私は、これまでのところあまり成功することなく、n-> infとして制限で計算できるシリーズとしてそれを書こうとし始めました。
解決
正確な答えを得る1つの方法は、無限の幾何学シリーズを使用することです。インフィニティまでの指数1の分数Rの無限の合計、0 <= r <1、r/(1-r)。
あなたの例では、0。(0011)、0.0011は分数3/16を表します。 3を要求すると、r = 1/16が取得されます。 r/(1-r)=(1/16)/(15/16)= 1/15。それを3で掛けて、あなたはあなたの答えを得るとあなたはあなたの答えを得る:3/15 = 1/5 = 0.2。
他のヒント
0.(0011)または0.0(101)を繰り返すバイナリ番号を考えると、どのように小数に変換するのでしょうか?
これは、10進数と同じ方法でバイナリで解くことができます(つまり、正確な合理的な量を決定できます)。小数では、たとえば、たとえば、 0.(567)
, 、そして、私たちはそれが表す正確な合理的な量を決定したい、私たちは単に取る 567
私たちの分子として、そして 999
(持っている数 n
9
S、ここで n
繰り返しグループの数字数)私たちの分母として:
0.(567) = 567/999 = 189/333 = 63/111
現在、最低の条件です。このプロセスは、完全な無限の幾何学シリーズの結果の蒸留です @Rick Reganが言及しました.
バイナリでは、それを除いて同じことをします n
9
私たちの分母として、私たちは望んでいます n
1
s(as 1
バイナリで最も高い数字です)。たとえば、
0.(0011) = 0011 / 1111 =(in decimal) 3/15 = 1/5
繰り返しグループの前に数字がある場合は、この計算について算術を行うだけです。たとえば、 0.0(101)
ただです 0.(101)
2で割った。この後者は 101 / 111
, 、 また 5/7
, 、 それで 0.0(101)
は 5/14
.
コンピューターでさえそれを正しく理解していません。通常、値は単純に丸みを帯びています。あまりにも精度のあるフロート値の表示を開始すると、0.4ではなく0.3984のような奇妙な値になります。
ベースの小数を別のベースに変換することは、多くの場合、精度の損失を引き起こすことがよくあります。魔法のように回復することはできません。これが、お金のような重要なものを数えるプログラムでフロートやダブルを使用しないでください。
あなたが十分に正確に正確であると考えるまで続けて、それを丸めてください。
最大の数字(ベース10で9、9)を使用して小数点以下と同じことを行う場合、すべてを1つのステップにまとめることができます。繰り返される数字の前。うまくいけば、この例はこれを明確にします:
0.196(2) = (196*9 + 2)/(9000)
0.12(034) = (12*999 + 34)/99900
b0.01(011) = (b1*b111 + b11)/b11100 = (1*7 + 3)/(7*4) = 10/28