整数の内部表現に関しては,
ほとんどの機種で同一の表現となっているのに対して,
実数型に関してはいくつかの規格が存在する.
このように実数表現形式の異なる計算機同志でデータを交換するための
ユーティリティーが REALLIB である.
一般に, 実数型の変数は浮動小数点の形で表現される.
すなわち, β進法を使った場合, 実数は
±(0.f1f2f3・・・fm)β×β±E | (1) |
±(0.f1f2f3・・・fm) = ±(f1×β-1 + f2×β-2 +f3×β-3 +・・・fm×β-m) | (2) |
ほとんどのメインフレーム系の計算機で使用されている実数表現は IBM形式と呼ばれるものである. これに対して, UNIXなどのコンパイラでは IEEE(アイ・トリプル・イーと読む)規格を採用しているものが多い. どちらも, 32ビットを1語とする点は同じであるが, 採用されている進法が異なり, 表現できる実数の範囲や精度に違いがある.
これは富士通, 日立などのいわゆるIBMコンパチ汎用機で採用されている 16進法の浮動小数点形式である. これらの計算機はもともと事務処理などのデータ処理が便利なように 作られているため, 16進演算が基本になっている. 各ビットの使い方は以下の通り.
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ± E+64 f1 f2 f3 f4 f5 f6
ここで, 指数部は負にならないようにEに64を足した 「ゲタばき表現」で表され, Eは-64から63の値をとる. 仮数部は16進の6桁で, 7桁目は切捨てられる. 0は, この表示体系にはなじまない数値であるので, 別途, 「全てのビットが0である数値」という定義がなされている.
この方法で表される0でない数値のうち絶対値最大のものは
(1-16-6)×1663 = 7.23700×1075 (3)
であり, 絶対値最小のものは
16-1×16-64 = 5.397605×10-79 (4)
である.
また, この方法で表される数値の相対誤差は f1=f2=・・・=f6=15 の時, 最も小さくて=
約16-6 ≈ 6×10-8 (5)
f1=1, の時, 最も大きくて
約16-5 ≈ 10-6 (6)
である. このようにf1の値が小さいと, その上位ビットが無駄になってしまうので精度が極端に悪くなる.
これはUNIXマシンなどで採用されている 2進法の浮動小数点形式である. 最近では, この形式を採用する計算機が多い. これは, IBM形式に比べて相対精度が高いという特徴がある. 各ビットの使い方は以下の通り.
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ± E+126 f2…f4 f5…f8 f9…f12 f13…f16 f17…f20 f21…f24
ここで, 指数部はEに126を足した「ゲタばき表現」で表され, Eは-125から128の値をとる. 仮数部は2進の24桁で, f1は常に1と決っているので省略される. ただし, Eが-126 (ゲタばき表現の指数部が0) の時には, f1=0と見なして, より小さな数を表現するが, 当然 2進24桁の精度はない. また, E=129 (ゲタばき表現の指数部が255) の時は, 無限大など特殊な数字を表すのに用いられ, 実数演算はできない. 0は全てのビットが0である.
この方法で表される正規数( f1 ≠0)のうち 絶対値最大のものは
(1-2-24)×2128 = 3.40282347×1038 (7)
であり, 絶対値最小のものは
2-1×2-125 = 1.17549435×10-38 (8)
である. 非正規数(f1=0)まで含めて, 絶対値最小のものは,
2-24×2-125 = 1.40129846×10-45 (9)
である.
また, この方法で表される正規数の相対誤差は f1=f2=・・・=f24=1 の時, 最も小さくて
約2-25 ≈ 3×10-8 (10)
f1=1, f2=・・・= f6 = 0の時, 最も大きくて
約2-24 ≈ 6×10-8 (11)
である. ただし, これは実数を丸める時に 25桁目を0捨1入(四捨五入の2進数版)した場合で, IEEE規格ではその他の丸めも許されている. 切捨ての場合は, この2倍になる. もちろん, 非正規数はこの限りではない.
我々の身の回りにあるコンピュータで採用されている 表現方法を以下の表に示す.
計算機 | OS | コンパイラ | 浮動小数点表現方法 | 備考 |
FACOM | MSP(汎用) | FORT77EX | IBM | |
FACOM | XMP(UNIX) | FORT77EX | IBM | |
HITAC | VOS3(汎用) | ?? | IBM | |
HITAC | HIUXM(UNIX) | f77 | IBM | |
SUN | UNIX | SUN FORTRAN | IEEE | |
PC9801 | MS-DOS | F77L(Lahey) | IEEE | |
PC9801 | MS-DOS | BASIC | その他* |
注(*): 2進表現でIEEEに近いが, 符号ビットの位置や指数部のゲタの値などが異なる.