1

10 進数 (基数 10) では、1/30.33333 の繰り返しにしか近似できません。

近似値としてしか表現できない 2 進法に相当する数は?

4

10 に答える 10

5

0.1 はその一例であり、0.2 も同様です。

この質問は、すでに非常に良い回答があるこの他の SO の質問にも似ています。

于 2009-11-04T15:23:51.353 に答える
3

より適切な質問は、2 進数で正確に表現できる数値を尋ねることです。他のすべてのものは近似するか、まったく表現できません。

すべてのコンピューター科学者が浮動小数点演算について知っておくべきことを参照してください。

于 2009-11-04T15:24:46.750 に答える
2

有限表現を使ってどの有理数を2進数で表現できるかを尋ねるつもりだと思います。これは、10進数の1/3の例から推測しています。事実、無限の表現を許可すれば、すべての有理数を2進数で表現できます。しかし、この質問は、有限の表現のみを許可する場合にのみ、コンピュータサイエンスの観点から興味深いものです。さらに、特定のコンピューター表現(たとえば、 IEEE 754)について質問しているのではなく、単に一般的な位置表現について質問していると仮定します。

の有理数は、のすべての素因数が除数である場合に限り、ベースで有限表現を表すことができp/qます。無理数は、どの基数でも有限表現を持ちません。(p, q) = 1bqb

特に、の有理数は、のすべての素因数が除数である場合に限り、2進数の有限表現として表すことができp/qます。つまり、2進数で有限表現を持つ有理数は、非負の整数の場合のみです。さらに、そのようなすべての有理数は、2進数の有限表現で表すことができます。これらの数は2進分数として知られています。(p, q) = 1q2p/q(p, q) = 1q = 2^kk

于 2009-11-04T16:16:01.680 に答える
2

その表記法では正確に表現できない無限の数がありますが、ここでは 1/10 を示します。

于 2009-11-04T15:23:51.177 に答える
1

基数 2 で正確に表現できる数は、2進有理数です。これらは、整数 k と整数 n に対して k/2^n の形式で記述できる数値です。その形式で記述できない数値は、基数 2 で非終了表現になります。

ただし、基数 2 で表現可能な数値ではなく、floatorなどの固定浮動小数点型で表現可能な数値について質問しているようですdouble。これはもっと微妙な質問です。2 進有理数でない数は表現できませんが、すべての 2 進有理数も表現できるわけではありません。

于 2009-11-04T16:03:34.877 に答える
1

整数 k と整数 n の k/2^n として表現できないすべての数値です。

これらすべての数を見つける簡単な方法は、2 を含まないいくつかの素数を書き留めることです。3、5、7、11、13、17、および 19 は、2 を含まない素数の良い例です。

増殖開始。1/3、2/3、1/5、2/5、3/5、4/5、1/6、5/6、1/7、2/7など

これを行い、k/2^n 形式の数値を避けると、2 進数で正確に表現できない可能性のあるすべての分数を列挙することになります。

左端の 64 ビットがすべて同一である数値に到達したら、おそらく列挙を停止する必要があります。

于 2009-11-04T16:00:22.857 に答える
0

Python 2.4 の場合:

>>> 1.0 / 5.0
0.20000000000000001

これは、基数 2 を正確に表現するのが難しいことを示しています。

于 2009-11-04T15:24:00.167 に答える
0

2 進数 (.00011001100110011...) == 10 進数 (.1)

于 2009-11-04T15:24:25.317 に答える
-2

無限に突き刺すんだ

于 2009-11-04T15:23:41.847 に答える
-2

基数 10 で正確に表すことができない同じ数のセットは、基数 2 で正確に表すことはできません。そこに違いはないはずです。

于 2009-11-04T15:25:20.797 に答える