浮動小数点型(SingleやDoubleなど)は、メモリ内で符号、仮数、指数で表されます。科学的記法と考えてください:
Sign*Mantissa*Base^Exponent
予想どおり、ベース2を使用します。無限大とNaNを表すことを可能にする他の調整があり、指数がオフセットされます(それに戻ります)。 。詳細については、その表現と操作をカバーする標準IEEE 754を探してください。
ここでは、2進数の「仮数」と、小数点を配置する場所を示す「指数」と考えることができます。
シングルの場合、彼のサインに1ビット、指数に8ビット、仮数に23ビットがあります。
ここで重要なのは、最上位の桁から仮数を格納することです。左側のゼロはすべて関係ないことに注意してください。そして、バイナリで作業していることを考えると、最も重要な数字は1※であることがわかります。それはわかっているので、保存する必要はありません。その略記のおかげで、仮数の有効範囲は24ビットです。
※:保存している数字がゼロでない限り。そのために、すべてのビットをゼロに設定します。ただし、これを説明のもとで解釈しようとすると、2 ^ 24(暗黙の1)に1(2のべき乗0)を掛けたものになります。したがって、それを修正するために、指数ゼロは特別な値です。指数に無限大とNaNを格納する特別な値もあります。
指数オフセットに従って-特別な値を避けることとは別に-オフセットを持つことで、指数の符号を必要とせずに、仮数の開始前または終了後に小数点を配置できます。
これは、大きな数値の場合、浮動小数点型は仮数の末尾を超えて小数点を置くことを意味します。
仮数は24ビットの数値であることに注意してください。25ビットの数値を表すことはありません...余分なビットはありません。したがって、シングルは2 ^ 24と2 ^ 24 + 1を区別できません(これらは最初の25ビット数であり、シングルでは表されない最後のビットで異なります)。
したがって、整数の場合、単一の範囲は-2 ^ 24〜2 ^ 24です。そして、1を2 ^ 24に追加しようとすると、2 ^ 24になります(タイプに関する限り、2 ^ 24と2 ^ 24 + 1は同じ値です)。オンラインでお試しください。これが、整数から単一に変換するときに情報の損失がある理由です。また、これは、シングルまたはダブルを使用するループが、気付かないうちに実際に無限ループになる可能性がある理由でもあります。