小数点のある数は計算機のなかで 32 bit または 64 bit のデータとして表現されている. このような数を浮動小数点数とよんでいる. この表現法を Intel 80386 系の CPUを例にして 32 bit 表現の場合に説明しよう. なお, Asir で関数 deval が戻すのは 64 bit の浮動小数点数である.
32 bit データは,
1 bit の符号 , 8 bit の指数部
, 23 bit の仮数部
に分割される.
ここで
例:
は
00 00 80 3F 00000000 00000000 10000000 00111111 e は 011 1111 1
00 00 80 BF 00000000 00000000 10000000 10111111 e は 011 1111 1 = 127 ^ 符号bit
00 00 00 41 00000000 00000000 00000000 01000001 e は 100 0001 0 = 130 - ------- e を決める bit
01 00 80 3F 00000001 00000000 10000000 00111111 e は 011 1111 1 = 127 -------- -------- ------- 仮数部 t を決める bit 76543210 fedcba98
が
か
のときは, 特別な意味をもつ.
くわしくは IEEE754 規格をみよ.
上級者向け参考: 浮動小数点数がどのようにメモリに格納できるかを調べるには,
メモリを''生''で扱える や マシン語などの言語を用いると
容易である. Basic などの言語ではこのようなことを調べるのは容易では
ない.
次の
のプログラムは, 入力された小数点数がメモリにどのように
格納されているのかを表示する.
#include <stdio.h> main() { float a; unsigned char *p; int i; scanf("%f",&a); p = (char *)&a; printf("%f\n",a); for (i=0; i<sizeof(float); i++) { printf("%02x ", *p); p++; } printf("\n"); }