小数点のある数は計算機のなかで 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");
}