実数型

出典: フリー百科事典『ウィキペディア(Wikipedia)』
ナビゲーションに移動 検索に移動

実数型(じっすうがた)の記事では、コンピュータプログラミングにおいて実数の近似を表現するデータ型について説明する。実数は可算無限集合でないため、有限の量を正確に表すことしかできないコンピュータで、実数を正確に表現することは基本的には不可能であり、「実数型」という語自体は、数値表現の難しさが甘く考えられていた1960年代のプログラミング言語などで見られた歴史的表現、ないし、現代のものならば数式処理システムなどを除けば、ちゃんと考えていれば浮動小数点数型というような名前を使っているが、そうでない場合などに実数型という語を使っている場合もある。コンピュータの数値表現の記事も参照。

表現方法[編集]

前述のように実数は表現できないので、以下は全て、実数型ではなく実数の近似を表現するデータ型である。

有理数[編集]

一般的に有理数を表すには分子と分母を整数として記憶する方法が用いられる。整数型も参考のこと。

固定小数点数[編集]

固定小数点数データ型は、表現したい値に特定の数(2の冪となることが多い)を乗算したものをデータ表現とするデータ型である。データ表現から特定の数を割ると、そのデータが表す値になる。

例えばその特定の数を 65,536 (216) とすれば、0x12345678(十六進法)と表現されているデータは 0x12345678 / 65536 という値を意味していることになる。なお 0x12345678 / 65536 = 305419896 / 65536 = 4660 + 22136 / 65536 ≒ 4660.33777 である。この場合 65,536 を暗黙の内に分母にした有理数と見なすこともできる。

浮動小数点数[編集]

浮動小数点数データ型は、有理数型の柔軟性と固定小数点数の演算の速さの中間に位置する折衷案と言える。浮動小数点数ではデータ中の多少のビットを指数用に使い、残りを仮数に使う(通常、符号にも 1 ビット使われる)。仮数は通常 (0, 1] の範囲になる(通常、0の表現は特別扱いされる)。指数部分の値を予め定めておいた基数(通常2)で乗じた数を仮数にかけたものが、その浮動小数点数が表現する値となる。これを式にすると、仮数を f、指数の値を e、基数を b として f * be ということである。

浮動小数点数IEEE 754(浮動小数点数標準)も参照のこと。

十進型[編集]

0.1、0.01 など、十進では割り切れる小数でも、二進では無限小数となり丸め誤差が発生する。この種のデータを丸め誤差なしに扱うための実数型が十進型である(例えば、10.0 ÷ 3.0 という計算をしない者に限れば「丸め誤差なしに扱う」ことができる、ということである)。

内部表現は整数型の仮数で、それがスケーリングされる。仮数が整数 n のとき、実数 n / 10m を表す。10mスケールファクタ英語版と呼ぶ。

スケールファクタは固定とは限らず、浮動小数点数のようにスケールファクタを指数部として型の内部に備え可変とした型もある。たとえば Visual Basic の10進型は1、仮数部(符号なし整数)に12バイト、指数部・符号などに4バイトを使う。

仮数は通常の整数表現とは限らず、4ビットで10進1桁(0~9)を表すパックBCDや、8ビットで10進2桁(0~99)を表す内部表現も使われる。これらが使われるのは桁数の多い整数型を容易に提供するためであり、通常の整数表現で桁数を多くできるならパックBCD等を使う必要性は薄い。

浮動小数点表現の標準であるIEEE 754には、Densely packed decimal(DPD)という10ビットに十進の3桁を詰め込む効率の良い方法が近年追加された。

通貨型[編集]

金額型とも。通貨の量(金額)を表すための型である。性質上10進小数を正確に扱う必要があるため、10進型や10の冪でスケーリングした固定小数点型で実装される。

二重指数表現[編集]

±p±qmp, q は定数、m が内部表現される変数)の形の実数を表す。p = q = 2 とするURRが知られる。

仮数部と指数部の2変数を持つ浮動小数点数と比べ、指数の指数とでも言うべき1つの変数しか持たない。同じビット数の浮動小数点数より非常に広い範囲の実数を、可変する精度(±1 付近で最も高精度で、それらから離れるに従い悪くなる)で表せる。仮数部と指数部のビット数が可変な実数表現と言うこともできる。

いくつか便利な特徴があるが、実装が複雑になるため、個人でも購入が容易な広く市販されているプロセッサ等の命令の対象(オペランド)として、これを直接利用できるようなものはない。

真の実数の表現[編集]

数式処理システムなど、一般的な数の表現法である「数を具体的に数値として表現する」という以外の方法であれば、実数のような性質を持つデータを取り扱うことはできる。制限として、例えば「数値を計算せずに式の形からはわからないような、しかし、同じ値になる」という2つの式を、数値によって比較しようとすると、無限に計算し続けなければならないかもしれない(すなわち、計算可能でない場合がありうる)、といった場合などがあるかもしれない。