【浮点数怎么计算?】-查字典问答网
分类选择

来自储文明的问题

  【浮点数怎么计算?】

  浮点数怎么计算?

1回答
2019-11-21 04:35
我要回答
请先登录
蒋丽雯

  请耐心看完:

  浮点数运算

  假定有两个浮点数X=Mx*2Ex,Y=My*2Ey

  (1)加减运算

  实现X±Y运算,需要如下五步:

  1.1对阶操作,即比较两个浮点数的阶码值的大小.求△E=Ex-Ey.当其不等于零时,首先应使两个数取相同的阶码值.其实现方法是,将原来阶码小的数的尾数右移|△E|位,其阶码值加上|△E|,即每右移一次尾数要使阶码加1,则该浮点数的值不变(但精度变差了).尾数右移时,对原码形式的尾数,符号位不参加移位,尾数高位补0;对补码形式的尾数,符号位要参加右移并使自己保持不变.为减少误差,可用另外的线路,保留右移过程中丢掉的一到几位的高位值,供以后舍入操作使用.

  1.2实现尾数的加(减)运算,对两个完成对阶后的浮点数执行求和(差)操作.

  1.3规格化处理,若得到的结果不满足规格化规则,就必须把它变成规格化的数,规格化处理规则如下:

  x09当结果尾数的两个符号位的值不同时,表明尾数运算结果溢出.此时应使结果尾数右移一位,并使阶码的值加1,这被称为向右规格化,简称右规.

  x09当尾数的运算结果不溢出,但最高数值位与符号位同值,表明不满足规格化规则,此时应重复地使尾数左移、阶减减1,直到出现在最高数值位上的值与符号位的值不同为止,这是向左规格化的操作,简称左规.

  1.4舍入操作.在执行对阶或右规操作时,会使尾数低位上的一位或多位的数值被移掉,使数值的精度受到影响,可以把移掉的几个高位的值保存起来供舍入使用.舍入的总的原则是要有舍有入,而且尽量使舍和入的机会均等,以防止误差积累.常用的办法有"0"舍"1"入法,即移掉的最高位为1时则在尾数末位加1;为0时则舍去移掉的数值.该方案的最大误差为2-(n+1).这样做可能又使尾数溢出,此时就要再做一次右规.另一种方法"置1"法,即右移时,丢掉移出的原低位上的值,并把结果的最低位置成1.该方案同样有使结果尾数变大或变小两种可能.即舍入前尾数最低位已为0,使其变1,对正数而言,其值变大,等于最低位入了个1.若尾数最低位已为1,则再对其置1无实际效用,等于舍掉了丢失的尾数低位值.

  1.5判结果的正确性,即检查阶码是否溢出.浮点数的溢出是以其阶码溢出表现出来的.在加减运算真正结束前,要检查是否产生了溢出,若阶码正常,加(减)运算正常结束;若阶码下溢,要置运算结果为浮点形式的机器零,若上溢,则置溢出标志.

  例15:某浮点数阶码6位(含1位符号位:阶符),补码表示,尾数10位(含1位符号位,数符),补码表示,X=2010B*0.11011011B,Y=2100B*(-0.10101100B),求X+Y

  由已知条件,Ex=+010B,Mx=0.11011011B,

  Ey=+100B,My=-0.10101100B

  对应补码分别为

  [Ex]补=[+010B]补=[+00010B]补=000010B

  [Mx]补=[+0.11011011B]补=[0.110110110B]补=0,110110110B

  [Ey]补=[+100B]补=[+00100B]补=000100B

  [-Ey]补=111100B

  [My]补=[-0.10101100B]补=[-0.101011000B]补=1,010101000B

  浮点表示分别为:

   数符 阶码尾数数值

   [X]浮=0000010 110110110

   [Y]浮=1000100 010101000

   15_(1)对阶

   [△E]补=[Ex]补+[-Ey]补=0000010B+1111100B=1111110B

  △E=-00010B=-2,说明X的阶码小,应使Mx右移两位,Ex加2

  所以修正[X]浮=000010000110110110

  15_(2)尾数求和

   0000110110110

  +11010101000

  1110001010110

  15_(3)尾数规格化

  尾数运算结果的符号位与最高数值位均为1,应执行左规处理,具体为:将尾数左移一位,符号位1位,结果为1000101011,阶码减1变为000011.

  15_(4)尾数移出位的舍入处理

   左规已将对阶移出的1位有效1移入,尾数不用做舍入处理.

  15_(5)判溢出,写结果

  尾数已规格化且阶码符号位为00,没有溢出,最终结果为

  [Ex+y]补=000011Ex+y=+00011B

  [Mx+y]补=1000101011Mx+y=-0.111010101B

  所以,X+Y=2+0011B*(-0.111010101B)

  (2)乘法运算

  实现X*Y运算,需要如下三步:

  2.1尾数相乘(两个定点小数相乘)

  2.2阶码求和

  2.3结果左规、舍入

  例16:某浮点数阶码3位(含1位符号位:阶符),补码表示,尾数3位(含1位符号位,数符),原码表示,X=210B*0.1101B,Y=2-01B*(-0.1011B),求X*Y

  由已知条件,Ex=+10B,Mx=0.1101B,

  Ey=-01B,My=-0.1011B

  对应机器数分别为:

  [Ex]补=[+10B]补=010B

  [Mx]原=[+0.1101B]原=0,1101B

  [Ey]补=[-01B]补=111B

  [My]原=[-0.1011B]原=1,1011B

  机内浮点表示分别为:

   数符 阶码 尾数数值

   [X]浮=0010 1101

   [Y]浮=1111 1011

   16_(1)尾数相乘(Mx*My)

   1.1[|Mx|]原=[+0.1101B]原=0,1101B

  [|My|]原=[+0.1011B]原=0,1011B

  x091.2高位积乘数/低位积

  Y0

  0000001011

  +[Y0*|X|]补001101

  001101

  右移0001101101

  +[Y0*|

2019-11-21 04:37:07

最新问答

推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读

  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  •