当前位置: C语言 -- 专题 -- 浮点数

浮点数(四)

3、乘法运算

基本操作:

X = (-1)SX×MX×2EX

Y = (-1)SY×MY×2EY

X×Y = (-1)(SX+SY)×(MX×MY)×2(EX+EY)


6.25100.7510的二进制乘法为例:

(1)、两个数的二进制形式

6.2510 = 110.012 = 1.1001×22

二进制形式为:

0 1000 0001 1001 0000 0000 0000 0000 000

0.7510 = 0.112 = 1.1×2-1

二进制形式为:

0 0111 1110 1000 0000 0000 0000 0000 000

(2)、检查是否有乘数为0,如果有,则返回0

这里两个乘数均不为0


(3)、对符号字段进行按位异或运算

0^0 = 0


(4)、对指数字段进行运算

积的指数字段 = X的指数字段 + Y的指数字段 - 127

       = 10000001 + 01111110 - 01111111

       = 10000000


(5)、尾随有效数字字段相乘

1 . 1 0 0 1
* 1 . 1 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
1 1 0 0 1
1 1 0 0 1
1 0 0 1 0 1 1 0 0 0

(6)、规格化结果

= 10.01011000×21

  = 1.001011000×22

结果的二进制形式为:

0 1000 0001 0010 1100 0000 0000 0000 000

4、除法运算

基本操作:

X = (-1)SX×MX×2EX

Y = (-1)SY×MY×2EY

X/Y = (-1)(SX-SY)×(MX/MY)×2(EX-EY)


3.7510-1.510的二进制除法为例:

(1)、两个数的二进制形式

3.7510 = 11.112 = 1.111×21

二进制形式为:

0 1000 0000 1110 0000 0000 0000 0000 000

-1.510 = -1.12 = -1.1×20

二进制形式为:

1 0111 1111 1000 0000 0000 0000 0000 000

(2)、检查操作数是否为0

如果XY均为0,结果为NaN

如果Y0,结果为

如果X0,结果为0

这里两个操作数均不为0


(3)、对符号字段进行按位异或运算

0^1 = 1


(4)、对指数字段进行运算

商的指数字段 = X的指数字段 - Y的指数字段 + 127

       = 10000000 - 01111111 + 01111111

       = 10000000


(5)、尾随有效数字字段相除

1 0 1
1 . 1 ) 1 . 1 1 1
1 1
1 1
1 1
0

(6)、规格化结果

= -1.01×21

结果的二进制形式为:

1 1000 0000 0100 0000 0000 0000 0000 000