いいえ、すべてではありませんが、すべての整数を正確に表現できる範囲が存在します。
32ビット浮動小数点数の構造
32bit 浮動小数点型は
- 符号用の 1 ビット
- 指数は8ビット
- 小数部の 23 ビット (先頭の 1 を暗黙指定)
数字を表す
基本的に、フォームに数字があります
(-)1.xxxx_xxxx_xxxx_xxxx_xxxx_xxx (binary)
次に、(偏りのない)指数で左右にシフトします。
ビットを必要とする整数を表すには、左にビット単位n
でシフトする必要があります。(浮動小数点を超えるn-1
すべてのes は単純にゼロです)x
整数を 24 ビットで表現する
24 ビット (およびそれ以下) を必要とするすべての整数を表すことができることは簡単にわかります。
1xxx_xxxx_xxxx_xxxx_xxxx_xxxx.0 (unbiased exponent = 23)
x
es を任意に または のいずれかに1
設定できるため0
です。
この方法で表現できる最大数は次のとおりです。
1111_1111_1111_1111_1111_1111.0
また2^24 - 1 = 16777215
次に大きい整数は です1_0000_0000_0000_0000_0000_0000
。したがって、25 ビットが必要です。
整数を 25 ビットで表現する
25 ビット整数 (偏りのない指数 = 24) を表現しようとすると、数値は次の形式になります。
1_xxxx_xxxx_xxxx_xxxx_xxxx_xxx0.0
利用可能な 23 桁はすべて、浮動小数点を超えてシフトされています。先頭の桁は常に 1 です。合計で 24 桁です。しかし、25 が必要なので、ゼロが追加されます。
最大値が見つかりました
「1_0000_0000_0000_0000_0000_0000 with the form
1_xxxx_xxxx_xxxx_xxxx_xxxx_xxx0.0 , by simply assigning
1 to all
x es. The next higher integer from that is:
1_0000_0000_0000_0000_0000_0001 . It's easy to see that this number cannot be represented accurately, because the form does not allow us to set the last digit to
1 : It is always
0」と表すことができます。
24個のゼロが続くの1
は、正確に表現できる整数の上限です。下限は、符号ビットが反転されているだけです。
すべての整数を表現できる範囲(境界を含む)
64 ビット浮動小数点数の構造
- 符号用の 1 ビット
- 11 指数ビット
- 52小数ビット
すべての整数を表現できる範囲(境界を含む)
これは、同じ議論を 64 ビット浮動小数点数の構造に適用することで簡単に実現できます。
注: これは、表現できるすべての整数であるとは言えませんが、すべての整数を表現できる範囲を示しています。その範囲を超えると、その範囲の整数を掛けた 2 のべき乗のみを表すことができます。
組み合わせ論
32 ビット整数が表現できるすべての整数を 32 ビット浮動小数点数で表現することは不可能であると自分自身に納得させるだけで、浮動小数点数の構造を見る必要さえありません。
- 32 ビットでは、2 32の異なるものを表すことができます。それ以上でもそれ以下でもありません。
- 32 ビット整数は、これらすべての「もの」を使用して数値を表します (ペアごとに異なります)。
- 32 ビット浮動小数点数は、少なくとも 1 つの数値を小数部分で表すことができます。
したがって、32 ビットの浮動小数点数が、2 32 個の整数すべてに加えて、この小数を表すことは不可能です。