答えを見つけようとするとき、私はこれを見つけて、これが本当で、それがなぜであるか疑問に思っていました。10進数が基数に有限の表現を持つかどうかを調べるための説明
https://stackoverflow.com/a/489870/5712298
誰も私にそれを説明したり、素晴らしいことだ、それを説明するページに私をリンクすることができます。
答えを見つけようとするとき、私はこれを見つけて、これが本当で、それがなぜであるか疑問に思っていました。10進数が基数に有限の表現を持つかどうかを調べるための説明
https://stackoverflow.com/a/489870/5712298
誰も私にそれを説明したり、素晴らしいことだ、それを説明するページに私をリンクすることができます。
StackOverflowのマークアップはよく数学の記法をサポートしていない、とこれのほとんどの読者は、プログラマになりますので、私は一般的なプログラミング表現の構文を使用するつもりです:
* multiplication
^ exponentiation
/division
x[i] Element i of an array x
== equality
PROD product
これは、与えられた、かどうかの問題を扱うに基数r
画分a/(r^n)
終端、終端基数s
まったく同じ値を有する画分b/(s^m)
、a
、b
整数、r
とs
正の整数、n
とm
非負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=10
とs=2
の一般的なケースにこれを適用する
、r
の素因数分解は(2^1)*(5^1)
です。 2は2の係数なので、無視することができます。 5はないので、5^n
をa
のファクタにする必要があります。
は、いくつかの特定のケースを考えてみてください。
小数点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でない主な要素を考慮して、一般的なケースにも拡張する必要があります。
リンクされた答えによって、10進値が_binary浮動小数点_で正確に表現できるかどうかが決まります。 _binary_、それ自体はあいまいです。このように、あなたの質問のタイトルはおそらく変化する必要がありますので、単に_a base_ではなく_floating point_表現に非常に特有です。 – Clifford
リンクのメソッド記述にエラーがあると私のコメントはそれに加えて参照してください。 – Clifford