ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

计组——浮点数的表示和运算(考前记一记,喝前摇一摇)

2021-12-08 14:58:31  阅读:385  来源: 互联网

标签:阶码 真值 0000 计组 尾数 浮点数 color 喝前


由于定点数表示的数字范围有限,当我们在数据位数不变的情况下,想增加数据的长度时,该怎么办呢?这就是浮点数要解决的问题。
在这里插入图片描述
阶码E反映浮点数的表示范围及小数点的实际位置(数值的大小),其中阶符为正表示要把尾数的数值部分的小数点往后移,为负值表示要把小数点往前移
尾数M的数值部分的位数n反映浮点数的精度,其中数符表示正负

举个简单的例子类比一下:
1000 π 1000\pi 1000π
=3141.5926……
≈ 3.14 × 1 0 3 \approx3.14\times 10^{3} ≈3.14×103
≈ 0.314 × 1 0 4 \approx0.314\times 10^{4} ≈0.314×104
≈ 0.314159 × 1 0 4 \approx0.314159\times 10^{4} ≈0.314159×104
这里的乘号后面 1 0 x 10^{x} 10x 相当于是阶码部分,因为x均是正数,因此阶符都是0,此时x就是阶码的数值;乘号前面的3.14,0.314相当于尾数部分

浮点数的表示

定点数:
定点小数,小数点固定在第一位后面
定点整数,小数点固定在最后一位后面

浮点数:
阶码:常用补码或移码表示的定点整数
尾数:常用原码或补码表示的定点小数

浮点数的真值: N = r E × M N=r^{E}\times M N=rE×M
r 是浮点数阶码的底(隐含)通常 r=2;E称为阶码,M称为尾数。

尾数给出一个小数,阶码指明了小数点要向前/向后移动几位。

【例】阶码、尾数均用补码表示,求a,b的真值
a=0,01;1.1001
b=0,10;0.01001
【分析】a:阶码0,01对应真值+1;
尾数1.1001对应真值-0.0111;
a的真值:21 * (-0.0111)=-0.111(相当于小数点右移一位或者算数左移一位)

b:阶码0,10对应真值+2;
尾数0.01001对应真值+0.01001
b的真值:22 * (0.01001)=1.001(相当于算数左移两位)

浮点数的作用和基本原理

如果采用1B的存储空间存储a和b,a占8位正好;b占9位,如果将最后一位抛弃,势必降低了b的精度,此时,可采用浮点数规格化,保留浮点数精度
所以b = 22 * (0.01001) = 21 * (+0.1001)
这样保证了在存储空间不变的情况下,保留了浮点数的精度

浮点数规格化(重点)

规格化浮点数,规定尾数的最高位数值必须是一个有效值
左规:尾数算数左移一位(小数点右移),阶码减1,直到尾数最高位是有效位
右规:尾数算数右移一位(小数点左移),阶码加1(当浮点数运算的结果尾数出现溢出,双符号位为01或10时)

在这里插入图片描述
注:采用“双符号位”,当溢出发生时,可以挽救,更高的符号位是正确的符号位

浮点数的表示范围(了解)

1.用原码表示的尾数进行规格化
正数为0.1XX……X的形式,其最大值表示为0.11……1;最小值表示为0.10……0
尾数的表示范围是 1 2 ≤ M ≤ ( 1 − 2 − n ) \frac{1}{2}\leq M \leq (1-2^{-n}) 21​≤M≤(1−2−n)
负数为1.1XX……X的形式,其最大值表示为1.10……0;最小值表示为1.11……1
尾数的表示范围是 − ( 1 − 2 − n ) ≤ M ≤ − 1 2 -(1-2^{-n})\leq M \leq -\frac{1}{2} −(1−2−n)≤M≤−21​

2.用补码表示的尾数进行规格化
正数为0.1XX……X的形式,其最大值表示为0.11……1;最小值表示为0.10……0
尾数的表示范围是 1 2 ≤ M ≤ ( 1 − 2 − n ) \frac{1}{2}\leq M \leq (1-2^{-n}) 21​≤M≤(1−2−n)
负数为1.0XX……X的形式,其最大值表示为1.01……1;最小值表示为1.00……0
尾数的表示范围是 − 1 ≤ M ≤ − ( 1 2 + 2 − n ) -1\leq M \leq -(\frac{1}{2}+2^{-n}) −1≤M≤−(21​+2−n)

【例】若某浮点数的阶码、尾数用补码表示,共4+8位:
0,110;1.1110100,如何规格化?
【分析】阶码部分:+6
尾数部分:用补码表示,并且是负数,负数的补码,必须保证数值部分最高位一定是0,才能保证尾数尽可能多的表示一些精度,因为需要对尾数进行算数左移3位,低位补0,变为1.0100000,阶码减3
于是规格化后:0,011;1.0100000

注:
用原码还是补码表示,会影响规格化的规则
规则化原码尾数,最高数值位一定是1
规格化补码尾数,符号位与最高数值位一定相反

IEEE 754标准

在这里插入图片描述
在这里插入图片描述
不同之处:
① 尾 数 用 原 码 表 示 , 隐 藏 表 示 最 高 位 1 , 实 际 表 示 的 尾 数 是 1. M {\color{Red} 尾数用原码表示,隐藏表示最高位1,实际表示的尾数是1.M} 尾数用原码表示,隐藏表示最高位1,实际表示的尾数是1.M(用原码表示时,最高位是有效位,所以是1)
② 偏 置 值 = 2 n − 1 − 1 {\color{Red} 偏置值=2^{n-1}-1} 偏置值=2n−1−1
③ 阶 码 全 0 、 全 1 有 特 殊 用 途 {\color{Red} 阶码全0、全1有特殊用途} 阶码全0、全1有特殊用途,因此8位的阶码正常范围是-126~127

阶码用移码表示,移码=真值+偏置值,此时的偏置值= 2 n − 1 − 1 2^{n-1}-1 2n−1−1
真值 -128=-1000 0000,此时偏置值为 0111 1111
移码=-1000 0000 + 0111 1111
= 0111 1111 - 1000 0000
= 1 0111 1111 - 1000 0000 (这一步操作是给被减数加了 2 8 2^{8} 28,最终结果是不变的)
= 1111 1111

【例】短浮点数 1 000 {\color{Red}1\color{Cyan}000} 1000 0001 { \color{Cyan} 0001} 0001 1 000 {\color{Cyan}1\color{green}000} 1000 1010 {\color{green}1010} 1010 0101 {\color{green}0101} 0101 0000 {\color{green}0000} 0000 1000 {\color{green}1000} 1000 0000 {\color{green}0000} 0000

数符s阶码E尾数数值M
1 {\color{Red}1} 1 00000011 {\color{Cyan}00000011} 00000011 00010100101000010000000 {\color{green}00010100101000010000000} 00010100101000010000000

规格化后的短浮点数的真值为: ( − 1 ) s × 1. M × 2 E − 127 (-1)^{s}\times 1.M\times 2^{E-127} (−1)s×1.M×2E−127
【例】将十进制数-0.75转换为IEEE 754 的单精度浮点数格式表示
【分析】 ( − 0.75 ) 10 = ( − 0.11 ) 2 = ( − 1.1 ) 2 × 2 − 1 (-0.75)_{10}=(-0.11)_{2}=(-1.1)_{2}\times 2^{-1} (−0.75)10​=(−0.11)2​=(−1.1)2​×2−1
数符=1
尾数部分=.100 0000 0000 0000 0000 0000 0000 (隐含最高位是1)
阶码真值= -1
单精度浮点型偏移量=127D
移码=阶码真值+偏移量=-1+111 1111 = 0111 1110(凑足8位)
(或者移码=127-1=126,对应二进制 0111 1110)
因此,最终可知

数符s阶码E尾数数值M
10111 1110100 0000 0000 0000 0000 0000

【例】(2020年408)带符号整数用补码表示,float型数据用IEEE 754标准表示,当x机器数为C800 0000H时,x的值是()
【分析】
第一步,先十六进制转二进制:
C800 0000H = 1100 1000 0000 0000 0000 0000 0000 0000
第二步,确定数符、阶码和尾数:

数符s阶码E尾数数值M
1100 1000 0000 0000 0000 0000 0000 0000

第三步,逐个分析:
数符=1 --> 是个负数
尾数=.000 0000 0000 0000 0000 0000 0000 (隐含最高位是1) --> 尾数真值=1.0
阶码=100 1000 0= 2 7 + 2 4 2^{7}+2^{4} 27+24=144(移码),偏置值127D,由移码=真值+偏置值
因此阶码真值是=144-127=17

最终得出浮点数对应的真值= ( − 1.0 ) 2 × 2 17 (-1.0)_{2}\times 2^{17} (−1.0)2​×217= − 2 17 -2^{17} −217

浮点数的加减运算

作者有点懒,还没做任何整理……
有人要看嘛?

标签:阶码,真值,0000,计组,尾数,浮点数,color,喝前
来源: https://blog.csdn.net/vavid317/article/details/119781487

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有