浮点数的表示以及运算

浮点数的表示
浮点数N=MxRE ,其中,M是尾数,E是阶码。
在位数一定的情况下,若指数位越多,可表示数的范围就越大;尾数越多,可表示数的精度越高。

浮点数的一般机器格式

数符阶符阶码值尾数值
MsEjEn-1…………E0M-1…………-m
1位1位n位m位

Ms是尾数的符号位;
阶码有n+1位,其中有一位符号位Ej,在最高位;
尾数有m位。
为了保证数据精度,尾数通常用规格化形式表示:当R=2,且尾数值不为0时,其绝对值>=0.5。对非规格化浮点数,通过将尾数左移或右移,并修改阶码值使之满足规格化要求。

尾数格式化
尾数规格化要求:1/2<=|M|<1
尾数为原码表示时:
正数,0.1x…………x
负数,1.1x…………x
尾数为补码表示时:
正数,0.1x…………x
负数,1.0x…………x

浮点数的溢出判断
上溢—浮点数的阶码大于机器最大阶码—中断
下溢—浮点数的阶码小于机器最小阶码—零处理
设m为阶码,n为尾数
最大正数:(1-2-n)x2^( 2m-1)
最小负数:-(1-2-n)x2^( 2m-1)
最小正数:2-n x2^-( 2m-1)
最大负数:-2-n x2^-( 2m-1)

【EG】m=4,n=10,求尾数规格化后的浮点数表示
最大正数:0.1111111111x215 =215 x(1-2-10)
最小负数:-215 x(1-2-10)
最小正数:0.1000000000x2-15 =2-16
最大负数:-2-16
【EG】设某机器用32位表示一个实数,阶码部分8位(含一位阶符),用定点整数补码表示;尾数部分24位(含数符1位),用规格化定点小数补码表示,基数为2.给出X=256.5和Y=-256.5的浮点数表示。
X=(100000000.1)=0.1000000001x29 =0 00001001 10000000010000000000000
用16进制表示X=04C02000h
Y=-(100000000.1)=(-0.1000000001)x29 =(1.0111111111)x29 =1 00001001 01111111110000000000000
用16进制表示Y=84BFE000h

IEEE754标准
单精度格式: 1位符号位S+8位阶码E+23位尾数
双精度格式: 1位符号位S+11位阶码E+52位尾数
由于IEEE754标准约定在小数点左部有一位隐含位,从而实际使得尾数的有效值变为1.M。小数点左边的位恒为1,可省去。
阶码用移码表示:n位阶码,偏移量为(2n-1-1),即127或1023。

【EG】将十进制数178.125表示成微机中的单精度浮点数。
178.125=(10110010.001)=(1.0110010001)x27 = 0 10000110 01100100010000000000000=43322000h
【EG】将Pentium机中的单精度浮点数3F580000h表示成十进制数,其真值是多少
0011 1111 0101 1000 0000000000000000=0 01111110 10110000000000000000000=1.1011x2-1 =(0.11011)=0.5+0.25+0.0625+0.003125=0.84375
【考研真题】float型数据通常用IEEE754单精度浮点数格式表示。若编译器将float型变量x分配在一个32位浮点寄存器FR1中,且X=-8.25,则FR1的内容是
X=-(1000.01)=(-1.00001)x23 =1 10000010 00001000000000000000000=C1040000h

浮点数的加减运算
都为双符号位计算
(1)对阶操作:低阶向高阶补齐
尾数为原码,尾数右移,符号位不动,最高数值位补0
尾数为补码,尾数右移,符号位移动,最高位补符号位
(2)尾数运算
(3)结果规格化
结果不是规格化时应该左规,尾数左移1位,阶码减1,直到数符和第一数位不同为止
(4)舍入操作
(5)判断溢出:下溢置零,上溢中断
当尾数溢出时(>1)需要右规,尾数右移,阶码加1

【EG】X=0.1101x201 ,Y=(-0.1010)x211 ,求X+Y
00,01-00,11=11,10=-2
X=0.0011x211
尾数运算:00,0011+11,0110=11,1001
左规:11,0010x210
X+Y=(-0.1110)x22 =-3.5
【EG】X=0.1101X210 ,Y=0.1011x201,求X+Y
00,10-00,01=00,01
Y=0.010110x210
00,110100+00,010110=01,001010
右规:00,100101
X+Y=0.100101x211 =4.625
【EG】X=(-5/8)x2-5 ,Y=(7/8)x2-4 ,求X-Y
X=(-0.101)x2-5 =(1,011)x2-5
-Y=1.001x2-4
-5-(-4)=-1
11,1011x2-4 + 11,0010x2-4 =10,110100x2-4 =11,011010x2-3 =(-0.100110)x2-3 =-19/32x2-3

特例-0.5的补码不是规格化的数,-1的补码是规格化的数

  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值