単精度浮動小数点数
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2023/07/28 07:26 UTC 版)
情報処理において、単精度浮動小数点数 (たんせいどふどうしょうすうてんすう、英: single-precision floating-point number)は、コンピュータの数値表現の一種である。 本来の単精度浮動小数点数とは、倍精度浮動小数点数に対比して使われる用語であって倍精度浮動小数点数が無いシステムであれば単に浮動小数点数と呼ばれるべきものである(また浮動小数点数はもともと固定小数点数と対比させた言葉であった)。 そうして、単精度はシステムの基本となる精度であり、バイトマシン(キャラクターマシン)が普通になる前のワードマシンにおいて1語長分の記憶場所を占める浮動小数点数であるのが普通である。 昔のFORTRAN言語では、整数型と実数型は同じ語長を占めることを前提に言語の規格が制定されていたりもした。その記憶語1単位分のを占める実数型が単精度であり、記憶語2単位分を占める実数型は倍精度と呼ばれた。 Crayのベクトルマシンのような語長が64ビットである科学技術専用計算機では、たとえば単精度とは64ビットを意味した。
現在の浮動小数点形式の標準であるIEEE 754では、単精度は32ビット(4オクテット)、倍精度は64ビット(8オクテット)である。IEEE 754-2008 では単精度の形式は正式には binary32 と呼ばれている。「単」や「倍」という表現は32ビットを1ワードとする32ビットアーキテクチャを基にしている。
単精度浮動小数点数は、同じ幅の固定小数点数に比べてより広範囲な数値を表せるようになっているが、同時に精度を犠牲にしている。
ほとんどのプログラミング言語では標準の組み込み型として定義されている。C言語、C++、C#、Java、Haskellでは単精度のデータ型を float と呼ぶ[1]が、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 である。
IEEE 754 での単精度浮動小数点数の形式: binary32
IEEE 754 での binary32 の定義は次の通りである。
- 符号ビット: 1ビット
- 指数部の幅: 8ビット
- 仮数部の幅: 23ビット
符号ビットは表現する数値の符号(正負)を示す。指数部は 8 ビットで、符号なし整数として見た場合は 0 から 255 の値をとり、0 の時はゼロか非正規化数であることを、1 から 254 の時は -127 のゲタ履き(バイアス付き)表現で -126 から 127 の指数を、255 の時は無限大または NaN であることを示す。
指数部が 0(ゼロ、および非正規化数)の場合を除き、仮数部で表現されるビットパターンのさらにひとつ上のケタに暗黙の 1 のビットがあるとみなす表現法(いわゆる「ケチ表現」)により、通常の数(正規化された数)の精度は、24ビット相当である。従って十進に換算したとき表現できる桁数は log10(224) ≈ 7.225 桁となる。標準化されたレイアウトは以下のようになる。
符号ビットを sign、バイアスつきの指数部を e、23ビットの仮数部の各ビットを b-n とすると、32ビットの binary32 フォーマットで表される数値は カテゴリ
- 単精度浮動小数点数のページへのリンク