質問

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 9S、ここで n 繰り返しグループの数字数)私たちの分母として:

0.(567) = 567/999 = 189/333 = 63/111

現在、最低の条件です。このプロセスは、完全な無限の幾何学シリーズの結果の蒸留です @Rick Reganが言及しました.

バイナリでは、それを除いて同じことをします n 9私たちの分母として、私たちは望んでいます n 1s(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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top