2

非終了の 2 進数 (分数) を decimal に変換する方法がわかりません。誰かが例をどうするか教えてもらえますか?

4

2 に答える 2

4
于 2012-05-22T05:45:57.780 に答える
1

基数 2 の「反復小数」があり、その反復部分が何であるかがわかっている場合は、 p/q表記 ( pqは整数)で正確な有理数に変換できます。

次に、除算を使用して、その数値を通常の 10 進数表記に変換し、必要な桁数の精度にすることができます。(場合によっては、正確な 10 進数値を書くことさえできます。)

最初のステップは、2 進数を反復部分と非反復部分に分離することです。

実際には、次の 3 つのことが必要です。

  • 繰り返さない部分、
  • 数字の繰り返しブロックの最初の出現、および
  • 数字の繰り返しブロックの長さ。

たとえば、番号が次のとおりであるとします。

1.0001100110011... (binary)

最後の 0011 が無期限に繰り返されます。

これを次のように分解できます。

  • 非繰り返し部分は 1.0 (バイナリ)
  • 繰り返しブロックの最初のオカレンスは 0.00011 (バイナリ) であり、
  • 繰り返しブロック (0011) の長さは 4 桁の 2 進数です。

2 進数の繰り返し部分は等比級数であり、そのような級数の標準式を使用して評価できます。

a + a*r + a*r^2 + a*r^3 + ... = a /(1 - r )。

この数式を繰り返し数字に適用するには:

  • aの値は、単純に繰り返しブロックの最初の出現の値です
  • 繰り返し部分が2 進数n桁の場合、式の比率rは 1/2^ nおよび 1 - r = (2^ n - 1)/(2^ n ) です。

例 1.00011011011... (バイナリ) の場合、

  • 繰り返し部分から、a = 0.00011 (バイナリ) = 3/32 になります。
  • n = 4 なので、1 - r = (2^4 - 1)/(2^4) = 15/16 です。

したがって

a /(1 - r ) = (3/32) / (15/16) = 3/30 = 1/10、

これは 0.1 (10 進数) として記述できます。

繰り返さない部分はもちろん1(10進数)なので、

1.00011011011... (バイナリ) = 1 + 0.1 (10 進数) = 1.1 (10 進数)。

この例では、10 進数表現は終了し、正確です。

2 進分数の繰り返しには、正確な終了 10 進数表現がないものが多数あります。たとえば、次のようになります。

0.01010101... (2 進数) = 1/3 = 0.3333... (10 進数)。

このような場合、小数点以下の桁数の後に四捨五入するか、10 進数の繰り返しパターンを見つけて記述する必要があります。

于 2017-01-04T00:08:53.620 に答える