ふどうしょうすうてん‐すう〔フドウセウスウテン‐〕【浮動小数点数】
浮動小数点数
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/12/11 06:14 UTC 版)
浮動小数点数(ふどうしょうすうてんすう、英: floating-point number)は、実数をコンピュータで処理(演算や記憶、通信)するために有限桁の小数で近似値として扱う方式であり[1]、人間が多く用いる10進数での数値の計算や表記に加えて、コンピュータの数値表現で多く用いる2進数の数値でも採用されている。多くの場合、符号部、固定長の指数部、固定長の仮数部、の3つの部分を組み合わせて、数値を表現する。
概要
この節はパターソンらの記述に基づく[1]。
実数は0以上かつ1以下のような有限の範囲でも、無限個の値(種類)が存在するため、コンピュータでは妥当なビット数で有限個の値(種類)の近似値で扱う必要がある。
実数-1/3は10進数表現では無限小数となるが、有限桁の小数で近似値を表記できる。下の例では10進数での4桁としている。
- -1/3
- -1 x 0.33333333333333...
- -1 x 0.3333 x 100
- -1 x 3.333 x 10-1
下の2つの表記は科学記数法 (scientific notation) とよばれ、小数点より左側の整数部分を1桁とする。 科学記数法のうち、仮数部の最上位の桁が0以外(10進表記では1から9)であるものを、正規化数 (normalized number) とよび、 上記の最後の表示が該当する。科学記数法も、10進数表記での浮動小数点数である。
実数-1/3はまた、2進数でもその近似値を有限桁の小数で表記できる。下の例では2進数17桁としている。
- -1/3
- -1 x 0.01010101010101010101010101010101...
- -1 x 0.0101010101010101
- -1 x (2-2 + 2-4 + 2-6 + 2-8 + 2-10 + 2-12 + 2-14 + 2-16)
- -1 x (1/4 + 1/16 + 1/64 + 1/256 + 1/1024 + 1/4096 + 1/16384 + 1/65536)
- -0.333328247(近似値の10進数表記)
2進数の小数も科学記数法で表記できる。
- -1 x 0.0101010101010101 x 20
- -1 x 0.101010101010101 x 2-1
- -1 x 1.01010101010101 x 2-2
上記は同じ値を、小数点の位置を移動し異なる表記にしているため、2進数表記での浮動小数点と呼ばれる。一番下の表記は、正規化数である。
コンピュータ内部での演算処理に最も適した浮動小数点数の表現は基数2であり、符号 (sign) S、仮数 (significand) F、指数 (exponent) Eにより下記の式で表記できる。
- (-1)S x F x 2E
数値に対する演算をあまり行なわずに数値を格納したり比較をする場合,あるいは演算が10進数でなければ正しく表せないような(お金の計算などの)用途では,計算機内部で10進数表現が 用いられる場合がある。
浮動小数点数のフォーマット
浮動小数点数のフォーマットには、以下で説明するものの他、以前は多数あった。
- IEEE方式(IEEE 754。最も広く採用されている標準規格)
- IBM方式(IBMのメインフレームおよびそれを模倣した各社の互換マシンで使われていた。指数部を基数16で表現するのが特徴)
- 指数部と仮数部を可変とする方式(これは研究用の面が強い。以下の該当する節で詳述)
IEEE方式(IEEE 754 形式)

sign:符号部、exponent:指数部、fraction:仮数部

IEEE 754 形式の
- 半精度浮動小数点数では、符号部 1 ビット ・ 指数部 5 ビット ・ 仮数部 10 ビット
- 単精度浮動小数点数では、符号部 1 ビット ・ 指数部 8 ビット ・ 仮数部 23 ビット
- 倍精度浮動小数点数では、符号部 1 ビット ・ 指数部 11 ビット ・ 仮数部 52 ビット
- 四倍精度浮動小数点数では、符号部 1 ビット ・ 指数部 15 ビット ・ 仮数部 112 ビット
で表現されている。各部は次のように定義されている。
- 符号部は、 0 を正、1 を負とする
- 仮数部は、整数部分が 1 であるような2進小数の小数部分(ケチ表現)を表す
- 指数部は、符号なし2進整数とし、半精度では 15、単精度では 127、倍精度では 1023、四倍精度では 16383 のゲタを履かせたゲタ履き表現で表す
つまり、IEEE 754 形式で表現する値は
- 半精度の場合: (−1)符号部 × 2指数部 − 15 ×(1 + 仮数部)
- 単精度の場合: (−1)符号部 × 2指数部 − 127 ×(1 + 仮数部)
- 倍精度の場合: (−1)符号部 × 2指数部 − 1023 ×(1 + 仮数部)
- 四倍精度の場合: (−1)符号部 × 2指数部 − 16383 ×(1 + 仮数部)
である。
ただし、IEEE 754 形式の指数部は複雑で、以下のような役割も持つ。
- 通常の浮動小数点数(正規化数)を表現するのは、指数部が単精度で 254 ~ 1(127 ~ −126)、倍精度で 2046 ~ 1(1023 ~ −1022)の範囲のときである
- 指数部が、単精度の場合 255(128)、倍精度の場合 2047(1024)のとき:
- 仮数部が 0 以外の場合は、非数(NaN; Not a Number)を表す
- 仮数部が 0 の場合は、符号部が 0 のときは正の無限大、符号部が 1 のときは負の無限大を表す
- 指数部が 0(単精度の場合 −127、倍精度の場合 −1023)のとき:
- 指数部、仮数部ともに 0 のときは ±0 を表す
0 を 0 で割ろうとすると NaN になる。また、
外部リンク
- 浮動小数点演算について (1991 年 3 月発行の "Computing Surveys" に掲載された "Every Computer Scientist Should Know About Floating-Point Arithmetic" 稿 (David Goldberg著) を再編集したもの)