2017-10-12 5 views
-2

答えを見つけようとするとき、私はこれを見つけて、これが本当で、それがなぜであるか疑問に思っていました。10進数が基数に有限の表現を持つかどうかを調べるための説明

https://stackoverflow.com/a/489870/5712298

誰も私にそれを説明したり、素晴らしいことだ、それを説明するページに私をリンクすることができます。

+0

リンクされた答えによって、10進値が_binary浮動小数点_で正確に表現できるかどうかが決まります。 _binary_、それ自体はあいまいです。このように、あなたの質問のタイトルはおそらく変化する必要がありますので、単に_a base_ではなく_floating point_表現に非常に特有です。 – Clifford

+0

リンクのメソッド記述にエラーがあると私のコメントはそれに加えて参照してください。 – Clifford

答えて

1

StackOverflowのマークアップはよく数学の記法をサポートしていない、とこれのほとんどの読者は、プログラマになりますので、私は一般的なプログラミング表現の構文を使用するつもりです:

* multiplication 
^ exponentiation 
/division 
x[i] Element i of an array x 
== equality 
PROD product 

これは、与えられた、かどうかの問題を扱うに基数r画分a/(r^n)終端、終端基数sまったく同じ値を有する画分b/(s^m)ab整数、rs正の整数、nm非負integeありますrs。

a/(r^n)==b/(s^m)は、b==a*(s^m)/(r^n)に相当します。 a/(r^n)は、正の整数mが存在する場合に限り、の終端部分に正確に等しいです。a*(s^m)/(r^n)が整数です。

r,PROD(p[i]^k[i])という素因数分解を考えてみましょう。 iの場合、p[i]^k[i]が素因数分解rの項である場合、p[i]^(n*k[i])は、r^nという素因数分解の項です。

a*(s^m)/(r^n)があれば整数であり、r^nの素因数分解におけるすべてのp[i]^(n*k[i])a*(s^m)

まずの要因であるだけで、場合p[i]sの要因であると仮定します。そして、十分に大きいと、mの場合、p[i]^(n*k[i])は、s^mのファクタです。

p[i]は、sの係数ではないとします。 p[i]^(n*k[i])は、それがaのファクタである場合に限り、a*(s^m)のファクタです。

b==a*(s^m)/(r^n)は整数であるmように非負の整数が存在する必要十分条件は、各rの素因数分解でp[i]^k[i]、いずれかp[i]ためs又はp[i]^(n*k[i])の因子が因子である、ということですaです。 r=10s=2の一般的なケースにこれを適用する

rの素因数分解は(2^1)*(5^1)です。 2は2の係数なので、無視することができます。 5はないので、5^naのファクタにする必要があります。

は、いくつかの特定のケースを考えてみてください。

小数点0.1 5が1倍ではないので、何の正確なバイナリ分数当量が存在しない、1/10あります。

10進数0.625,625/(10^3)5^3は125であり、これは625の係数であるため、正確な2進数の等価物が存在します。 (バイナリ0.101です)。

参照回答https://stackoverflow.com/a/489870/5712298のメソッドは、10進数から2進数の場合と同じです。指数が1でない主な要素を考慮して、一般的なケースにも拡張する必要があります。

関連する問題