[浮点数加法运算]浮点数表示及运算

转自:http://www.t262.com/read/35834.html


篇一 : 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

浮点数 浮点数表示及运算

篇二 : 浮点数表示及运算

计算机组成原理
浮点数表示及运算
2013年11月25日
计算机组成原理 1

一、浮点数的表示
9×10-28 = 0.9 ×10-27 2×1033 = 0.2 ×1034

任意一个十进制数 N 可以写成 N=10E· M (十进制表示) × 计算机中一个任意进制数 N 可以写成 N=Re×m = 2E×M = 2±e× (±m)
m :尾数,是一个纯小数。 e :浮点的指数, 是一个整数。 R :基数,对于二进计数值的机器是一个常数,一般规定R 为2,8或16

E0

E1

E2

… …



Em

M0

M1

M2

… …



Mn

阶符
计算机组成原理

阶值

尾符

尾数值
2

一个机器浮点数由阶码和尾数及其符号位组成: 尾数:用定点小数表示,给出有效数字的位数,决定了浮点数的表示精度 阶码:用定点整数形式表示,指明小数点在数据中的位置,决定了浮点数
的表示范围。

浮点数的表示范围
负上溢

负下溢

正下溢 正上溢

-?

最 小 负 数

负数

最 大 负 数

0

? ? ?

N=2E×M |N|→∞ 产生正上溢或者负上溢 |N|→0 产生正下溢或者负下溢

最 小 正 数

正数

最 大 正 数

+?

计算机组成原理

3

?
?

机器字长一定时,阶码越长,表示范围越大,精度越低 浮点数表示范围比定点数大,精度高
8位定点小数可表示的范围
? ?

?

0.0000001 --- 0.1111111 1/128 --- 127/128 可表示2-11*0.0001 --- 211*0.1111

?

设阶码2位,尾数4位
? ?

0.0000001 --- 111.1
可表示2-111*0.001 --- 2111*0.111

?

设阶码3位,尾数3位
? ?

0.0000000001 --- 1110000
4

计算机组成原理

二、浮点数规格化 浮点数是数学中实数的子集合,由一个纯小数乘上一个指数 值来组成。

一个浮点数有不同的表示:
0.5; 0.05?101 ; 0.005 ?102 ; 50 ?10-2 为提高数据的表示精度,需做规格化处理。 在计算机内,其纯小数部分被称为浮点数的尾数,对非 0 值的浮点数,要求尾数的绝对值必须 >= 1/2,即尾数域的最高 有效位应为1,称满足这种表示要求的浮点数为规格化表示:

0.1000101010
把不满足这一表示要求的尾数,变成满足这一要求的尾数 的操作过程,叫作浮点数的规格化处理,通过尾数移位和修改 阶码实现。
计算机组成原理 5

规格化目的: 为了提高数据的表示精度 为了数据表示的唯一性 尾数为R进制的规格化: 绝对值大于或等于1/R 二进制原码的规格化数的表现形式:
正数 0.1xxxxxx 负数 1.1xxxxxx 补码尾数的规格化的表现形式:尾数的最高位与符号位相反。 正数 0.1xxxxxx 负数 1.0xxxxxx
6

计算机组成原理

例:对数据12310作规格化浮点数的编码,假定1位符号位,基 数为2,阶码5位,采用移码,尾数10位,采用补码。
解:12310=11110112= 0.11110110002×27 [7]移=10000+00111 = 10111 [0.1111011000]补=0.1111011000 [123]浮= 1011 1 0 11 1101 1000

= BBD8H

计算机组成原理

7

三 、浮点数的标准格式IEEE754
为便于软件移植,使用 IEEE(电气和电子工程师协会)标准IEEE754 标 准:尾数用原码;阶码用“移码”;基为2。

31 30

23 22

0

32位
64位 S

S
63 62

E
E

M
52 51 0

M

S——尾数符号,0正1负; M——尾数, 纯小数表示, 小数点放在尾数域的最前面。采用原码表示。 E——阶码,采用“移码”表示(移码可表示阶符); 阶符采用隐含方式,即采用移码方法来表示正负指数。

计算机组成原理

8

规格化浮点数的真值

31 30
32位浮点数格式:

23 22

0

S

E

M

一个规格化的32位浮点数x的真值为: x = (-1)s ? (1.M) ? 2E-127 e =E – 127 一个规格化的64位浮点数x的真值为: 这里e是真值,E是机器数 x = ( –1)s×(1.M)×2E-1023
1.隐藏位技术

原码非0值浮点数的尾数数值最高位必定为 1,则在保存浮点数到内存前,
通过尾数左移, 强行把该位去掉, 用同样多的位数能多存一位二进制数, 有利于提高数据表示精度,称这种处理方案使用了隐藏位技术。 当然,在取回这样的浮点数到运算器执行运算时,必须先恢复该隐藏位。
2.阶码用“移码”偏移值127而不是128

Emin=1, Emax=254/2046
计算机组成原理

9

例:若浮点数 x 的二进制存储格式为(41360000)16,求其32位 浮点数的十进制值。
解: 0100,0001,0011,0110,0000,0000,0000,0000 数符:0 阶码:1000,0010 尾数:011,0110,0000,0000,0000,0000 指数e=阶码-127=10000010-01111111 =00000011=(3)10 包括隐藏位1的尾数: 1.M=1.011 0110 0000 0000 0000 0000=1.011011 于是有 x=(-1)s×1.M×2e =+(1.011011)×23=+1011.011=(11.375)10

计算机组成原理

10

例: 将十进制数20.59375转换成32位浮点数的二进制格式来存储。

解:首先分别将整数和分数部分转换成二进制数: 20.59375=10100.10011 然后移动小数点,使其在第1,2位之间 10100.10011=1.010010011×24 e=4 于是得到: e =E – 127 S=0,E=4+127=131=1000,0011,M=010010011 最后得到32位浮点数的二进制存储格式为
0100 0001 1010 0100 1100 0000 0000 0000= (41A4C000)16

计算机组成原理

11

例:将十进制数-0.75表示成单精度的IEEE 754标准代码。

解:-0.75 = -3/4 = -0.112 = -1.1×2-1
=(-1)1×(1 + 0.1000 0000 0000 0000 0000 000)×2-1 =(-1)1×(1 + 0.1000 0000 0000 0000 0000 000)×2126-127

s=1,E=12610 = 011111102,F=1000 … 000。
1 011,1111,0 100,0000,0000,0000,0000,0000 B F 4 0 0 0 0 0 H

计算机组成原理

12

单精度浮点数编码格式

符号位

阶码

尾数

表示

0/1
0/1 0

255
255 255

非零1xxxx
非零0xxxx 0

NaN Not a Number
sNaN Signaling NaN +∞

1
0/1 0/1

255
1~254 0

0

-∞
(-1)S× (1.f) ×2(e-127) (-1)S× (0.f) ×2(-126)

f f (非零)
0

0/1

0

+0/-0

计算机组成原理

13

IEEE754 规格化浮点

数表示范围
格式 单精度 最小值 Emin=1, M=0, 1-127 -126 1.0×2 =2 最大值 Emax=254, 254-127 f=1.1111…, 1.111…1×2 127 -23 = 2 ×(2-2 ) Emax=2046, 2046-1023 f=1.1111…,1.111…1×2 1023 -52 =2 ×(2-2 )
正下溢出 零 负上溢出 可表示负数范围 可表示正数范围 正上溢出
数轴
计算机组成原理

双精度 Emin=1, M=0, 1-1023 -1022 1.0×2 =2
负下溢出

-(1-2-23 )?2127

-0.5?2-128

0

0.5?2-128

(1-2-23)?2127

14

浮点加减法运算
设有两个浮点数x和y, 它们分别为: x=2Ex · x M y=2Ey · y M 其中 Ex 和 Ey 分别为数x和y的阶码, Mx 和 My为数x和y的尾数。 两浮点数进行加法和减法的运算规则是: x±y=(Mx2Ex-Ey±My)2Ey Ex <= Ey

计算机组成原理

15

完成浮点加减运算的操作过程大体分为: (1) 0 操作数的检查;
(2) 比较阶码大小并完成对阶; (3) 尾数进行加或减运算; (4) 结果规格化。 (5) 舍入处理。 (6) 溢出处理。

计算机组成原理

16

(1) 0 操作数检查 (2) 对阶

使二数阶码相同(即小数点位置对齐),这个过程叫作对阶。 ? 先求两数阶码 Ex 和 Ey之差,即△E = Ex-Ey 若△E = 0,表示 Ex=Ey 若△E > 0, Ex>Ey 若△E < 0, Ex<Ey 通过尾数的移动来改变Ex或Ey,使其相等。

? 对阶原则 阶码小的数向阶码大的数对齐; 对阶过程小阶的尾数右移,每右移一位,其阶码加1(右规)。
210*(0.11000)+28*(0.00110) 大阶对小阶 210*(0.11000)--?28*(11.000) 11.000+0.00110 ?????????

小阶对大阶 28*(0.00110)--?210*(0.00001)
0.00001+0.11000=0.11001
计算机组成原理 17

例: x=201×0.1101, y=211×(-0.1010), 求x+y=? 解:为便于直观了解,两数均以补码表示,阶码、尾数均采用 双符号位。 [x]补=00 01, 00.1101 [y]补=00 11, 11.0110 [△E]补= [ Ex]补-[Ey]补= 00 01+11 01 = 11 10 △E = -2, 表示Ex比Ey小2, 右移一位, 再右移一位, 至此, △E=0, 因此将x的尾数右移两位. 得 [x]补=00 10, 00.0110 得 [x]补=00 11, 00.0011 对阶完毕.

计算机组成原理

18

(3) 尾数求和运算 尾数求和方法与定点加减法运算完全一样。 对阶完毕可得: [x]补=00 11, 00.0011 [y]补=00 11, 11.0110 对尾数求和: 00.0011 + 11.0110 11.1001 即得: [x+y]补=00 11, 11.1001

计算机组成原理

19

(4) 结果规格化 求和之后得到的数可能不是规格化了的数, 为了增加有效数 字的位数, 提高运算精度,必须将求和的结果规格化。 ①规格化的定义:

采用原码: 正数: S=0.1 ×××…× 负数: S=1.1 ×××…× 采用双符号位的补码:
对正数: 对负数:

1 ? S ?1 2

(二进制)

S=00.1×××…× S=11.0×××…×

计算机组成原理

20

规格化规则
?

?

?
? ?

运算结果产生溢出时,必须进行右归 ? 如变形补码结果出现 10.XX 或者 01.XXX 如运算结果出现 0.0XXX或 1.1XX 必须左归 左归时最低数据有效位补0

右归时连同符号位进位位一起右移 左归时,阶码作减法,右归时,阶码作加法

规格化方法
? ? ? ?
计算机组成原理

00.0XXXX 11.1XXXX 01.XXXXX 10.XXXXX

--? --? --? --?

00.1XXX0 11.0XXX0 00.1XXXX 11.0XXXX

左规 左规 右规 右规
21

例:两浮点数 x=0.1101 ?210 , y=(0.1011) ?201, 求x+y。 解: [x]补=00 10,00.1101 [y]补=00 01,00.1011

对阶: [△E]补= [ Ex]补-[Ey]补=00 10+ 11 11= 00 01
y向x对齐,将y的尾数右移一位,阶码加1。 [y]补=00 10,00.0101 求和: 00.1101 + 00.0101 01.0010 [x+y]补=00 10,01.0010 右归:运算结果两符号位不同,其绝对值大于1,右归。 [x+y]补= 00 11,00.1001
计算机组成原理 22

(5) 舍入处理 在对阶或向右规格化时, 尾数要向右移位, 这样, 被右移的尾数 的低位部分会被丢掉, 从而造成一定误差,因此要进行舍入处理。 ? 简单的舍入方法有两种: ① “0舍1入”法

即如果右移时被丢掉数位的最高位为0则舍去,反之则将尾数 的末位加“1”。
② “恒置1”法 即只要数位被移掉,就在尾数的末位恒置“1”。从概率上来 说,丢掉的0和1各为1/2。
计算机组成原理 23

在IEEE754标准中,舍入处理提供了四种可选方法: 就近舍入 其实质就是通常所说的"四舍五入"。例如,尾数超出规 定的23位的多余位数字是10010,多余位的值超过规定的最低有 效位值的一半,故最低有效位应增1。若多余的5位 是01111,则 简单的截尾即可。对多余的5位10000这种特殊情况:若最低有 效位现为0,则截尾;若最低有效位现为1,则向上进一位使其变为 0。 朝0舍入 即朝数轴原点方向舍入,就是简单的截尾。无论尾数是 正数还是负数,截尾都使取值的绝对值比原值的绝对值小。这种 方法容易导致误差积累。 朝+∞舍入 对正数来说,只要多余位不全为0则向最低有效位进1; 对负数来说则是简单的截尾。 朝-∞舍入 处理方法正好与 朝+∞舍入情况相反。对正数来说, 只要多余位不全为0则简单截尾;对负数来说,向最低有效位进1。
计算机组成原理 24

(6)溢出处理 与定点加减法一样,浮点加减运算最后一步也需判溢出。 在浮点规格化中已指出,当尾数之和(差)出现01.××…×或 10.××…×时,并不表示溢出,只有将此数右规后,再根据 阶码来判断浮点运算结果是否溢出。

若机器数为补码,尾数为规格化形式,并假设阶符取2位, 阶码取7位、数符取2位,尾数取n位,则它们能表示的补码在数 轴上的表示范围如图所示。
负 正

计算机组成原理

25

最 小 负 数


最 大 负 数

最 小 正 数

最 大 正 数


图中A,B,a,b分别对应最小负数、最大正数、最大负数和最小正数。 它们所对应的真值分别是: A最小负数 2+127 ? (-1) B最

大正数 2+127 ? (1-2-n) a最大负数 2-128 ? (-2-1-2-n) b最小正数 2-128 ? 2-1
计算机组成原理 26

图中a,b之间的阴影部分,对应阶码小于128的情况,叫做 浮点数的下溢。下溢时.浮点数值趋于零,故机器不做溢出处 理,仅把它作为机器零。 图中的A、B两侧阴影部分,对应阶码大于127的情况,叫 做浮点数的上溢。此刻,浮点数真正溢出,机器需停止运算, 作溢出中断处理。一般说浮点溢出,均是指上溢。 可见,浮点机的溢出与否可由阶码的符号决定: 阶码[j]补=01, ? ? ? ? ?为上溢,机器停止运算,做中断处理; 阶码[j]补=10, ? ? ? ? ?为下溢,按机器零处理。
负 正

计算机组成原理

27

例:若某次加法操作的结果为 [X+Y]补=00.111, 10.1011100111 则应对其进行向右规格化操作: 尾数为: 11.0101110011 , 阶码加1: 01.000 阶码超出了它所能表示的最大正数(+7),表明本次浮 点运算产生了溢出。 例:若某次加法操作的结果为 [X+Y]补=11.010, 00.0000110111 11.010 则应对其进行向左规格化操作: + 11.100 [-4]补 尾数为: 00.1101110000 , 阶码减4: 10.110 阶码超出了它所能表示的最小负数(-8),表明本次浮点 运算产生了溢出。

计算机组成原理

28

例:两浮点数x = 2101×0.11011011, y = 2111×(-0.10101100)。假设尾数在计算机中以补码表示, 可存储10位尾数,2位符号位,阶码以补码表示,双符号位,求 x+y。

解:将x,y转换成浮点数据格式
[x]浮 = 00 101, 00.11011011 [Y]浮 = 00 111, 11.01010011+1 00 111, 11.01010100

步骤1:对阶,阶差为Ex-Ey=[Ex]补+[-Ey]补
[-Ey]补=11000+1=11001 Ex-Ey=00101+11001=11110 =-(00001+1)=-00010=-2 < 0

Ex-Ey<0 X阶码加2
计算机组成原理

Ex<Ey 小阶对大阶, X尾数右移2位
29

解:将x,y转换成浮点数据格式
[x]浮 = 00 101, 00.11011011 [Y]浮 = 00 111, 11.01010011+1 00 111, 11.01010100

步骤1:对阶,阶差为Ex-Ey=[Ex]补+[-Ey]补
Ex-Ey<0 Ex<Ey 小阶对大阶, X阶码加2 X尾数右移2位 [x]浮 = 00 111, 00.00110110(11)
Ex-Ey=-2 < 0

步骤2:尾数求和
[X+Y]浮 = 00 111, 00.00110110(11 ) + 00 111, 11.01010100 = 00 111, 11.10001010(11)

计算机组成原理

30

步骤2:尾数求和
[X+Y]浮 = 00 111, 00.00110110(11) + 00 111, 11.01010100 = 00 111, 11.10001010(11)

步骤3:计算结果规格化
[X+Y]浮 为非规格化数,左归一位, 阶码减一, 00110, 11.00010101(1)

步骤4:舍入处理
[X+Y]浮 = 00 110, 11.00010110 (0舍1如法) [X+Y]浮 = 00 110, 11.00010101 (截去法)

步骤5:溢出判断 无溢出 [X+Y]浮 = 2110 x (-00.11101011)
计算机组成原理 31

计算机组成原理

32

例 设x=2010?0.11011011, y=2100 ?(-0.10101100), 求x+y。 解: 阶码采用双符号位, 尾数采用单符号位, 则它们的浮点表 示分别为 [x]浮= 00 010, 0.11011

011 [y]浮= 00 100, 1.01010100 (1) 求阶差并对阶 △E = Ex- Ey= [Ex]补+ [-Ey]补= 00 010 + 11 100 = 11 110 即△E为-2, x的阶码小, 应使 Mx右移两位, Ex加2, [x]浮=00 100, 0.00110110(11) 其中(11)表示Mx右移2位后移出的最低两位数。

计算机组成原理

33

(2)尾数求和 (3) 规格化处理

+

0.00110110(11) 1.01010100 1.10001010(11)

尾数运算结果的符号位与最高数值位为同值,应执行左规处 理,结果为1.00010101(10), 阶码为00 011。 (4) 舍入处理 1.00010101 1 采用0舍1入法处理, 则有: + 1.00010110 (5) 判断溢出 阶码符号位为00,不溢出,故得最终结果为 x + y = 2011 × (-0.11101010)
计算机组成原理 34

例:两浮点数x = 201×0.1101,y = 211×(-0.1010)。假设尾数在计 算机中以补码表示,可存储4位尾数,2位保护位,阶码以原码表示,求 x+y。

解:将x,y转换成浮点数据格式 [x]浮 = 00 01, 00.1101 [y]浮 = 00 11, 11.0110 步骤1:对阶,阶差为11-01=10,即2,因此将x的尾数右移两位,得 [x]浮 = 00 11, 00.001101 步骤2:对尾数求和,得: [x+y]浮 = 00 11, 11.100101 步骤3:由于符号位和第一位数相等,不是规格化数,向左规格化,得 [x+y]浮 = 00 10, 11.001010 步骤4:截去。 [x+y]浮 = 00 10, 11.0010 步骤5: 数据无溢出,因此结果为 x+y = 210×(-0.1110)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值