単精度浮動小数点数
↑ http://java.sun.com/docs/books/tutorial/java/nutsandbolts/datatypes.html
単精度バイナリ浮動小数点数の指数部はオフセット表現を使って符号化されており、指数値がゼロのときのオフセット値(バイアス値)は127である。
Emin = 01H−7FH = −126
Emax = FEH−7FH = 127
指数部バイアス = 7FH = 127
指数部バイアスは、エクセスNとも言う。詳しくは符号付数値表現を参照されたい。真の指数値は、指数部の値から指数部バイアスを引いた値となる。
00H と FFH は予約された指数値である。
従って、全てのビットパターンが符号として意味がある。正の最小値(非正規化数)は 2 ≈ 1.4 × 10 である。正の正規化数の最小値は 2 ≈ 1.18 × 10 である。表現可能な最大値は (2−2) × 2 ≈ 3.4 × 10 である。
IEEE 754-2008 では単精度の形式は正式には binary32 と呼ばれている。「単」や「倍」という表現は32ビットを1ワードとする32ビットアーキテクチャを基にしている。
単精度浮動小数点数は、同じ幅の固定小数点数に比べてより広範囲な数値を表せるようになっているが、同時に精度を犠牲にしている。
ほとんどのプログラミング言語では標準の組み込み型として定義されている。C言語、C++、C#、Java、Haskellでは単精度のデータ型を float と呼ぶが、C/C++の規格ではIEEE 754に準拠することは要求されていない。MATLABでは single と呼ぶ。PascalおよびVisual Basic .NETでは Single と呼ぶ。.NET Frameworkの共通型システムではSystem.Single構造体型として定義されており、各.NET言語における組み込み型はこの型へのエイリアスである。バージョン3.2以前のOctaveでは single という名前だが倍精度である。Pythonの float は倍精度であり、単精度のサポートはない。F#の単精度は float32 または single であり、倍精度は float または double である。
十進で有限桁数の小数が必ず二進で有限桁で表せるわけではない。例えば、十進の 0.1 は二進では正確に表現できないため近似値を用いることになる。
したがって、(12.375)10 = (12)10 + (0.375)10 = (1100)2 + (0.011)2 = (1100.011)2 となる。
IEEE 754 binary32 フォーマットでは、値を ( 1. x 1 x 2 . . . x 23 ) 2 × 2 e {\displaystyle (1.x_{1}x_{2}...x_{23})_{2}\times 2^{e}} という形式で表現しなければならないので、1100.011 をシフトして整数部が一桁になるようにしなければならない。この例では3桁シフトするので ( 1.100011 ) 2 × 2 3 {\displaystyle (1.100011)_{2}\times 2^{3}} となる。
最終的に ( 12.375 ) 10 = ( 1.100011 ) 2 × 2 3 {\displaystyle (12.375)_{10}=(1.100011)_{2}\times 2^{3}} となる。
この結果から次が得られる。
指数部は 3 となる(バイアスを加えるので実際は 130 = 1000 0010 となる)。