其他分享
首页 > 其他分享> > 计组——浮点数的表示和运算(考前记一记,喝前摇一摇)

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

作者:互联网

由于定点数表示的数字范围有限,当我们在数据位数不变的情况下,想增加数据的长度时,该怎么办呢?这就是浮点数要解决的问题。
在这里插入图片描述
阶码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