浮点运算

计算机内无论整数还是浮点数都是以二进制存储的;浮点数由三部分组成:符号位s,阶码e,尾数m;

一:预备:

  值                                    存储位                                      指数偏移量

real*4                      1位符号位(s)\8位指数(e)               23位尾数(m,共32位)   127(7FH)

real*8                      1位符号位(s)\11位指数(e)             52位尾数(m,共64位)      1023(3FFH)

real*10                    1位符号位(s)\15位指数(e)             64位尾数(m,共80位)       16383(3FFFH)

二:计算公式:

          V=(-1)^s*2^E*M

当e(各位)为全'0'时,E=1-(2^(e(位数)-1)-1);M=m;

如:real*4是8位,E=1-(2^(8-1)-1)=1-127=-126

即:

在real*4时:

V=(-1)^s*2^(-126)*m

在real*8时:

V=(-1)^s*2^(-1022)*m

当e(各位)不为全'0'且不为全'1'时,E=e(值)-(2^(e(位数)-1)-1);M=1+m

即:

在real*4时:
V=(-1)^s*2^(e(值)-127)*(1+m)
在real*8时:
V=(-1)^s*2^(e(值)-1023)*(1+m)

三:将浮点格式转换为十进制数

[例3.1]:

0x00280000(real*4)

转换为二进制:

0000 0000 0010 1000 0000 0000 0000 0000

0         000 0000 0          010 1000 0000 0000 0000 0000

一个符号位       8位指数位          23位尾数位

E=-126       m=0. 010 1000 0000 0000 0000 0000=0.3125

该浮点数的十进制数为:

V=(-1)^s*2^(-126)*m

V=(-1)^0*2^(-126)*0.3125=1*2^(-126)*0.3125=3.6734198463196484624023016788195e-39

四:将十进制数转换成浮点格式(real*4)

十进制数:26.0

二进制数:11010.0

规格化二进制数:

11010.0/1.10100=10000=2^4,因此:

1.10100*2^4

计算指数:

4+127=131

符号位              指数位                           尾数部分

0                 100 0001  1             101 0000 0000 0000 0000 0000

为:0x41D0 0000

0.75

二进制为:

0.11

规格化二进制:

1.1*2^-1

计算指数:

-1+127=126

0 01111110 10000000000000000000000
以单精度(real*4)浮点格式存储该数
0011 1111 0100 0000 0000 0000 0000 0000
0x3F40 0000

2.5
十进制-2.5转换成二进制
-10.1
规格化二进制数
-1.01*2^1
计算指数
1+127=128
符号位 指数部分 尾数部分
1 10000000 01000000000000000000000
以单精度(real*4)浮点格式存储该数
1100 0000 0010 0000 0000 0000 0000 0000
0xC020 0000

原文地址:https://www.cnblogs.com/itxiaocaiyidie/p/2368114.html