系统结构考点之浮点数格式化


算是学习系统结构后,遇到的第一个新的东西

如题2017年4月

分析

这个问题是发生在浮点数用二进数表示时的情形。此题做错,这其实源于对浮点数二进制表示问题的忽略。

相关知识

浮点数表示

这里直接引用书上的,虽然表示的复杂了些。但仔细看明白后,还要是比其他准确很多。

因为在看课本时已经复习了IEEE754中的内容,所以有些就不再展开了。
rm中的m可以认为是占用的二进制的位数。所以也可以说是二进制,八进制,十六进制这些比较 直观的概念来理解。
IEEE754中规定任何一个浮点数都可表示为:2E X M的形式,在计算机的存储中也只是存储了阶码E与尾数M。
阶码E,把它理解成指数就好多了,这样可以快速分辨出最大正数与最大负数,在计算机中用二进位表示,分别是:
最大正数=最大正尾数 X 2最大阶码
最大负数=最大负尾数 X 2最小阶码,相当于越靠近0

浮点数的格式化

主要是为了提高表示精度,当浮点数的尾数的真值不为0时,满足 1/2<M<1.形式为:
对于正数而言,有M = 00.1φφ…φ;//前两个0为符号,第二个1格式化正尾数,问题的答案
对于负数,其补码形式为11.0φφ…φ(即-0.0*******,左归)。
当进行补码浮点加减运算时,只要对运算结果的符号位和小数点后的第一位进行比较:如果它们不等,00.1φφ…φ或11.1φφ…φ,就是规格化的数;如果相等,就不是格式化的数,需要尾数左移实现格式化。
就不是格式化的数,需要尾数左移实现格式化。
在浮点加减运算时,尾数求和的结果也可以得到01.φφ…φ或10.φφ…φ,即两符号位不相等,在这定点加减运算中称为溢出,是不允许的。

格式化正尾数

书上的定义为:正尾数小数点后的第1个rm进制数位不是0的数。这个好理解,正数的小数点后,越靠近小数点,数越小,所以最小的正尾数值应当为小数点后第1个rm进制数位为1,其余位为0,所以是1 X rm^(-1)
rm中的m:表示尾数有多少位。在rm进制下,所占的总的计算机位数。
用m’表示:在rm进制下,所占的位数。公式为m’=m/log2rm. 当rm=2,也就是二进制时m=m’.当rm=16,也就是十六进制的时候,m’=m/4.

同理,最大正尾数就是尾数各数位均为rm-1,如二进制就是2-1,16进制就是15,映像到二进制就是各位都是1.所谓的最大正尾数,就是如果最后一位上加上1,尾数就不存在了,而是直接进位变成了1,这就是最大的正尾数,所以用1(最大正尾数左边界)- rm(-m’)(最小位的权值),表示的就是最大正尾数。
小数点后的位权与十进制是一样的,小数点后1位表示的是10^(-1)

小数的十进制与二进制转化

十进制小数转成二进制小数

十进制数的整数位是二进制数的整数位(按 除以2取余,逆序排列),十进制数的小数位是二进制数的小数位(按乘 2 取整,顺序排列)

例子,将2.51转成二进制
  1. 先将整数部分与小数部分分开,即分成2与0.51
  2. 先算整数部分,先看位数 n = l o g 2 2 = 1 , 不 用 上 取 整 , 所 以 + 1 = 2 位 二 进 制 数 表 示 n=log_2 2=1,不用上取整,所以+1=2位二进制数表示 n=log22=1,+1=2
    2/2 商1,余0
    1/2 商0,余1,所以整数部分,逆顺取表示为10
  3. 再算小数部分 0.51
    0.51 X 2 = 1.02 取1
    0.02 X 2 = 0.04 取0
    0.04 X 2 = 0.08 取0
    0.08 X 2 = 0.16 取0
    0.16 X 2 = 0.32 取0
    0.32 X 2 = 0.64 取0
    0.64 X 2 = 1.28 取1 顺序取就是0.1000001
    … 后面还有很多省略后直到余数为0,余数不为0也没有关系,取一定的精度即可,合起来就是10.1000001
二进制小数转成十进制

正数部分,从左到右以,2 ^ 0开始。小数部分从左到右,2^(-1)开始,权值相加

例子,101.011转成十进制
  1. 整数部分 1*2^(0) + 0*2^(1) + 1*2^(2) = 5
  2. 小数部分 0*2^(-1) + 1*2^(-2) + 1*2^(-3) = 1/4+1/8 = 0.875
二进制小数的科学计数

指数部分也用二进制表示即可。
101.011=1.01011 X 2 ^ (10)
可以看到,小数点右移了两位,所以2 ^ 2转化成二进制就是2 ^ (10)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

guangod

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值