第二章指令系统 ·指令系统是计算机系统结构的主要组成部分 ·指令系统是软件与硬件分界面的一个主要标志 指令系统软件与硬件之间互相沟通的桥梁 ·指令系统与软件之间的语义差距越来越大 2.1数据表示 2.2寻址技术 2.3指令格式的优化设计 2.4指令系统的功能设计 2.5RISC指令系统 2.1数据表示 ·新的研究成果,如浮点数基值的选择 ·新的数据表示方法,如自定义数据表示 2.1.1数据表示与数据类型 2.1.2浮点数的设计方法 2.1.3自定义数据表示 2.1.1数据表示与数据类型 ·数据的类型:文件、图、表、树、阵列、队列、链表、栈、向量、串、实 数、整数、布尔数、字符 数据表示的定义:数据表示研究的是计算机硬件能够直接识别,可以被指 令系统直接调用的那些数据类型。 例如:定点、逻辑、浮点、十进制、字符、字符串、堆栈和向量 ·确定哪些数据类型用数据表示实现,是软件与硬件的取舍问题 ·确定数据表示的原则: 一是缩短程序的运行时间, 二是减少CPU与主存储器之间的通信量 三是这种数据表示的通用性和利用率。 例2.1:实现A=A+B,A和B均为200×200的矩阵。分析向量指令的作用 解:如果在没有向量数据表示的计算机系统上实现,一般需要6条指令,其 中有4条指令要循环4万次。因此,CPU与主存储器之间的通信量 取指令2+4×40,000条, 读或写数据3×40,000个, 共要访问主存储器7×40,000次以上 如果有向量数据表示,只需要一条指令 减少访问主存(取指令)次数:4×40,000次 缩短程序执行时间一倍以上
2-1 第二章 指令系统 • 指令系统是计算机系统结构的主要组成部分 • 指令系统是软件与硬件分界面的一个主要标志 • 指令系统软件与硬件之间互相沟通的桥梁 • 指令系统与软件之间的语义差距越来越大 2.1 数据表示 2.2 寻址技术 2.3 指令格式的优化设计 2.4 指令系统的功能设计 2.5 RISC 指令系统 2.1 数据表示 • 新的研究成果,如浮点数基值的选择 • 新的数据表示方法,如自定义数据表示 2.1.1 数据表示与数据类型 2.1.2 浮点数的设计方法 2.1.3 自定义数据表示 2.1.1 数据表示与数据类型 • 数据的类型:文件、图、表、树、阵列、队列、链表、栈、向量、串、实 数、整数、布尔数、字符 • 数据表示的定义:数据表示研究的是计算机硬件能够直接识别,可以被指 令系统直接调用的那些数据类型。 例如:定点、逻辑、浮点、十进制、字符、字符串、堆栈和向量 • 确定哪些数据类型用数据表示实现,是软件与硬件的取舍问题 • 确定数据表示的原则: 一是缩短程序的运行时间, 二是减少 CPU 与主存储器之间的通信量, 三是这种数据表示的通用性和利用率。 例 2.1:实现 A=A+B,A 和 B 均为 200×200 的矩阵。分析向量指令的作用 解:如果在没有向量数据表示的计算机系统上实现,一般需要 6 条指令,其 中有 4 条指令要循环 4 万次。因此,CPU 与主存储器之间的通信量: 取指令 2+4×40,000 条, 读或写数据 3×40,000 个, 共要访问主存储器 7×40,000 次以上 如果有向量数据表示,只需要一条指令 减少访问主存(取指令)次数:4×40,000 次 缩短程序执行时间一倍以上
·数据表示在不断扩大,如字符串、向量、堆栈、图、表 ·用软件和硬件相结合的方法实现新的数据表示 例如:用字节编址和字节运算指令来支持字符串数据表示 用变址寻址方式来支持向量数据表示 2.1.2浮点数的设计方法 1、浮点数的表示方式 ·一个浮点数N可以用如下方式表示:N=mrm 需要有6个参数来定义。 两个数值 m:尾数的值,包括尾数的码制(原码或补码)和数制(小数或整数) e:阶码的值,移码(偏码、增码、译码、余码等)或补码,整数 两个基值: rm:尾数的基值,2进制、4进制、8进制、16进制和10进制等 re:阶码的基值,通常为2 两个字长: p:尾数长度,当rm=16时,每4个二进制位表示一位尾数 q:阶码长度,阶码部分的二进制位数 p和q均不包括符号位 ●浮点数的存储式 1位 p 注:m为尾数的符号位,er为阶码的符号位,e为阶码的值,m为尾数的值 2、浮点数的表数范围 尾数为原码 尾数用原码、纯小数,阶码用移码、整数时,规格化浮点数N的表数范围: N≤(1-rm2) 尾数为补码 尾数用补码表示时,正数区间的表数范围与尾数采用原码时完全相同,而负 数区间的表数范围为 -(r 浮点数在数轴上的分布情况 上溢 下溢(浮点零) 上溢 mIn 负数区 0 Nmin 正数区 Nmax 例2.2:设p=23,q=7,m=ne=2,尾数用原码、纯小数表示,阶码用移 码、整数表示,求规格化浮点数N的表数范围。 解:规格化浮点数N的表数范围是:
2-2 N m m e = r • 数据表示在不断扩大,如字符串、向量、堆栈、图、表 • 用软件和硬件相结合的方法实现新的数据表示 例如:用字节编址和字节运算指令来支持字符串数据表示 用变址寻址方式来支持向量数据表示 2.1.2 浮点数的设计方法 1、浮点数的表示方式 • 一个浮点数 N 可以用如下方式表示: 需要有 6 个参数来定义。 两个数值: m:尾数的值,包括尾数的码制(原码或补码)和数制(小数或整数) e:阶码的值,移码(偏码、增码、译码、余码等)或补码,整数 两个基值: rm:尾数的基值,2 进制、4 进制、8 进制、16 进制和 10 进制等 re:阶码的基值,通常为 2 两个字长: p:尾数长度,当 rm=16 时,每 4 个二进制位表示一位尾数 q:阶码长度,阶码部分的二进制位数 p 和 q 均不包括符号位 • 浮点数的存储式 1 位 1 位 q 位 p 位 mf ef e m 注:mf 为尾数的符号位,ef 为阶码的符号位,e 为阶码的值,m 为尾数的值。 2、浮点数的表数范围 • 尾数为原码 尾数用原码、纯小数,阶码用移码、整数时,规格化浮点数 N 的表数范围: − − − − − 1 1 rm rm N 1 r r p m m q e q r re ( ) • 尾数为补码 尾数用补码表示时,正数区间的表数范围与尾数采用原码时完全相同,而负 数区间的表数范围为: q e q r re rm N rm r r p m m − − − − 1 −( 1 + ) − • 浮点数在数轴上的分布情况 上溢 下溢(浮点零) 上溢 -Nmin 负数区 -Nmax 0 Nmin 正数区 Nmax 例 2.2:设 p=23,q=7,rm=re=2,尾数用原码、纯小数表示,阶码用移 码、整数表示,求规格化浮点数 N 的表数范围。 解:规格化浮点数 N 的表数范围是:
AN≤(1-2-2)2 即 2-13sN≤(1-22)27 例2.3:尾数用补码、纯小数表示,阶码用移码、整数表示,p=6,q=6, rm=16,re=2,求规格化浮点数N的表数范围。 解:规格化浮点数N在正数区间的表数范围是: 16-65≤N≤(1-16)163 在负数区间的表数范围是: -163≤N≤ +16)·16 16 3、浮点数的表数精度(误差) 产生误差的根本原因是浮点数的不连续性 误差产生的直接原因有两个: 是两个浮点数都在浮点集内,而运算结果却可能不在这个浮点集内 是数据从十进制转化为2、4、8、16进制,产生误差。 ●规格化尾数的表数精度为: 6( rm,P) 最后1个有效位的可信度为一半, 当rm=2时,有 P 4、浮点数的表数效率 浮点数是一种冗余数制( Redundat Number System) 浮点数的表数效率定义为 可表示的规格化浮点数的个数_2·(rm-1)·rnp-l.2·r:9+1 如厘占人 数 2·rnP·2·r:q 简化表示:mXrm) 当尾数基值为2时,浮点数的表数效率为: 72) 浮点数的表数效率随rm增大 当尾数基值rm=16时,浮点数的表数效率为 6=94% 尾数基值rm=16与rm=2相比,浮点数的表数效率提高了 2)=1875倍 x16) 4、浮点数尾数基值的选择 在表示浮点数的6个参数中,只有尾数基值m、尾数长度p和阶码长度q 与表数范围、表数精度和表数效率有关
2-3 1 2 2 7 7 2 23 2 1 1 2 2 - − − − N ( ) 即: -129 23 127 2 1− 2 2 − N ( ) 例 2.3:尾数用补码、纯小数表示,阶码用移码、整数表示,p=6,q=6, rm=16,re=2,求规格化浮点数 N 的表数范围。 解: 规格化浮点数 N 在正数区间的表数范围是: -65 6 63 16 1−16 16 − N ( ) 在负数区间的表数范围是: 63 6 64 16 16 16 1 16 − − + − − N ( ) 3、浮点数的表数精度(误差) • 产生误差的根本原因是浮点数的不连续性 • 误差产生的直接原因有两个: 一是两个浮点数都在浮点集内,而运算结果却可能不在这个浮点集内, 二是数据从十进制转化为 2、4、8、16 进制,产生误差。 • 规格化尾数的表数精度为: ( , ) ( ) r p p m = rm 1 − − 2 1 最后 1 个有效位的可信度为一半, 当 rm=2 时,有: ( , ) ( ) 2 2 2 1 2 1 p p p = = − − − 4、浮点数的表数效率 • 浮点数是一种冗余数制(Redundat Number System) • 浮点数的表数效率定义为: = = − + 可表示的规格化浮点数的个数 − 全部浮点数个数 2 1 2 1 2 2 1 (r ) r r r r m m e m e p q p q 简化表示: (r ) r r m m m = −1 当尾数基值为 2 时,浮点数的表数效率为: (2) 2 1 2 = 50% − = • 浮点数的表数效率随 rm 增大 当尾数基值 rm=16 时,浮点数的表数效率为: (16) 16 1 16 = 94% − = 尾数基值 rm=16 与 rm=2 相比,浮点数的表数效率提高了: T = = ( ) ( ) . 16 2 1875倍 4、浮点数尾数基值的选择 • 在表示浮点数的 6 个参数中,只有尾数基值 rm、尾数长度 p 和阶码长度 q 与表数范围、表数精度和表数效率有关
在字长确定的情况下,如何选择尾数基值rm,使表数范围最大、表数精度 和表数效率最高 假设有两种表示方式F1和F2,它们二进制字长相同,尾数都用原码或补码 小数表示,阶码都用移码、整数表示,阶码的基均为2,尾数的基不同。 浮点数表示方式F1:尾数基值rm=2,尾数长度pl,阶码长度q1, 二进制字长:L1=pl+q1+2。 浮点数表示方式F2:尾数基值rm2=2k,尾数长度p2,阶码长度q2, 进制字长:L2=kp2+q2+2。 由F1与F2的二进制字长相同,即Ll=L2,得: pl+gl=k p2+g2 字长和表数范围确定时,尾数基值rm与表数精度的关系 F1的表数范围是:|N1ma=2, F2的表数范围是:N2mx=(23)2 F1与F2的表数范围相同,得到:2q1=k·292 两边取以2为底的对数,得到:q1=q2+1og2k (2.2) 把(2.2)式代入(2.1)式,得到:pl=kp2-log2k Fl的表数精度是:6=1.2-p1 把2.3)代入(24得到:6=12 kp 2+log k F2的表数精度是:62=1.2k(-p2) 取F2与F1表数精度的比值:T=02=2k+kgk 只有k=1(尾数基值rm=2)或k=2(尾数基值rm=4)时,比值T=1 结论1:在字长和表数范围一定时,尾数基值m取2或4,浮点数具有最高 的表数精度。 字长和表数精度一定,尾数基值rm与表数范围的关系 由F1与F2的表数精度相同得到 2(2)2 即 pI=kp2-k+I (2.6) 把(2.6)代入(2.1)得到:q1=q2+k-1 (2.7) 0q2+k-1 F1的表数范围:2=2 2的表数范围:(2k)2=2 假设表数范围F2大于F1,则阶码的最大值F2大于F1: k> 即k 这个不等式在正整数定义域内没有解,即不存在比F1的表数范围更大的浮 点数表示方式 只有k=1(尾数基值rm=2)或k=2(尾数基值rm=4)时,F2阶码的最大 值等于F阶码的最大值 结论2:在字长和表数精度一定时,尾数基值r取2或4,浮点数具有最大 的表数范围。 推论1:在字长确定之后,尾数基值rm取2或4,浮点数具有最大的表数范
2-4 • 在字长确定的情况下,如何选择尾数基值 rm,使表数范围最大、表数精度 和表数效率最高; 假设有两种表示方式 F1 和 F2,它们二进制字长相同,尾数都用原码或补码、 小数表示,阶码都用移码、整数表示,阶码的基均为 2,尾数的基不同。 浮点数表示方式 F1:尾数基值 rm1=2,尾数长度 p1,阶码长度 q1, 二进制字长:L1=p1+q1+2。 浮点数表示方式 F2:尾数基值 rm2=2 k,尾数长度 p2,阶码长度 q2, 二进制字长:L2=k p2+q2+2。 由 F1 与 F2 的二进制字长相同,即 L1=L2,得: p1+q1=k p2+q2 (2.1) • 字长和表数范围确定时,尾数基值 rm与表数精度的关系 F1 的表数范围是: q N 1 2 | 1max|=2 , F2 的表数范围是: |N max| ( ) q k 2 2 2 = 2 , F1 与 F2 的表数范围相同,得到: q q k 1 2 2 = 2 两边取以 2 为底的对数,得到:q1=q2+log2 k (2.2) 把(2.2)式代入(2.1)式,得到:p1=k p2-log2 k (2.3) F1 的表数精度是: 1 1 1 1 2 = 2 − p (2.4) 把(2.3)代入(2.4)得到: 1 1 1 2 2 = 2 −kp +log k F2 的表数精度是: 2 1 1 2 2 = 2 k( − p ) 取 F2 与 F1 表数精度的比值: T k k = = − − 2 1 1 2 log (2.5) 只有 k=1(尾数基值 rm=2)或 k=2(尾数基值 rm=4)时,比值 T=1。 结论 1:在字长和表数范围一定时,尾数基值 rm取 2 或 4,浮点数具有最高 的表数精度。 • 字长和表数精度一定,尾数基值 rm 与表数范围的关系 由 F1 与 F2 的表数精度相同得到: 1 2 2 1 2 2 1 1 1 2 = − p − p k ( ) 即: p1=kp2-k+1 (2.6) 把(2.6)代入(2.1)得到:q1=q2+k-1 (2.7) F1 的表数范围: q1 q2 k 1 q2 k 1 2 2 2 2 2 = 2 = 2 + − − F2 的表数范围: q q k k 2 2 2 2 (2 ) = 2 假设表数范围 F2 大于 F1,则阶码的最大值 F2 大于 F1: q q k k k k 2 2 1 1 2 2 2 2 − 即 − 这个不等式在正整数定义域内没有解,即不存在比 F1 的表数范围更大的浮 点数表示方式 只有 k=1(尾数基值 rm=2)或 k=2(尾数基值 rm=4)时,F2 阶码的最大 值等于 F1 阶码的最大值。 结论 2:在字长和表数精度一定时,尾数基值 rm取 2 或 4,浮点数具有最大 的表数范围。 推论 1:在字长确定之后,尾数基值 rm取 2 或 4,浮点数具有最大的表数范
围和最高的表数精度。 例2.4:IBM370系列计算机的短浮点数表示方式,尾数基值rm=16,尾数 字长为16进制6位,阶码基值rm=2,阶码字长6位,尾数用原码、小数表示, 阶码用移码、整数表示。求表数范围和表数精度,并尾数基址m=2的浮点数表 示方式进行比较 解:表数精度为:δ=·16-(6-)=2-21 表数范围是:|Nm时=162°=236 若尾数基值m=2,则有:12-(p-D=21 解得p=21,则q=32-21-2=9,它的表数范围是 1Nm=22=2512 推论2:浮点数的尾数基值m取2,并采用隐藏位表数方法是最佳的浮点数 表示方式。这种浮点数表示方式能做到表数范围最大、表数误差最小、表数效率 最高。 目前,IBM公司的IBM360、370、4300系列机等,尾数基值rm=16。 Burroughs公司的B6700、B7700等大型机,尾数基值rm=8。 DEC公司的PDP-11、VAX-11和 Alpha等小型机,CDC公司的CDC6600、 CYBER70 等大型机, Intel公司的x86系列机等均采用尾数基值rm=2 5、浮点数格式的设计 定义浮点数表示方式的6个参数的确定原则 ●尾数:多数机器采用原码、小数表示 采用原码制表示:加减法比补码表示复杂,乘除法比补码简单 表示非常直观 采用小数表示能简化运算,特别是乘除法运算 阶码:一般机器都采用整数、移码表示 采用移码表示的主要原因是:浮点0与机器0一致。 阶码进行加减运算时,移码的加减法运算要比补码复杂 ●尾数的基值rm选择2, 阶码的基值re取2 浮点数格式设计的关键问题是 在表数范围和表数精度给定的情况下,如何确定最短的尾数字长p和阶码 字长 例2.5:要求设计一种浮点数格式,其表数范围不小于1037,正、负数对称 表数精度不低于1016。 解:根据表数范围的要求:22-1>1037 解这个不等式 log(log1O 37/lg2+1)=695 log 2 取阶码字长q=7 根据表数精度的要求,得到:1 P-1)∠10-16
2-5 围和最高的表数精度。 例 2.4:IBM 370 系列计算机的短浮点数表示方式,尾数基值 rm=16,尾数 字长为 16 进制 6 位,阶码基值 rm=2,阶码字长 6 位,尾数用原码、小数表示, 阶码用移码、整数表示。求表数范围和表数精度,并尾数基址 rm=2 的浮点数表 示方式进行比较。 解: 表数精度为: = = 1 − − − 2 16 2 (6 1) 21 表数范围是: N max = = 6 2 256 16 2 若尾数基值 rm=2,则有: 1 2 2 2 1 21 = −( p− ) − 解得 p=21,则 q=32-21-2=9,它的表数范围是: N max = = 9 2 512 2 2 推论 2:浮点数的尾数基值 rm取 2,并采用隐藏位表数方法是最佳的浮点数 表示方式。这种浮点数表示方式能做到表数范围最大、表数误差最小、表数效率 最高。 目前,IBM 公司的 IBM360、370、4300 系列机等,尾数基值 rm=16。 Burroughs 公司的 B6700、B7700 等大型机,尾数基值 rm=8。 DEC 公司的 PDP-11、VAX-11 和 Alpha 等小型机,CDC 公司的 CDC6600、CYBER70 等大型机,Intel 公司的 x86 系列机等均采用尾数基值 rm=2。 5、浮点数格式的设计 定义浮点数表示方式的 6 个参数的确定原则: • 尾数:多数机器采用原码、小数表示 采用原码制表示:加减法比补码表示复杂,乘除法比补码简单 表示非常直观。 采用小数表示能简化运算,特别是乘除法运算。 • 阶码:一般机器都采用整数、移码表示 采用移码表示的主要原因是:浮点 0 与机器 0 一致。 阶码进行加减运算时,移码的加减法运算要比补码复杂 • 尾数的基值 rm 选择 2, • 阶码的基值 re 取 2, 浮点数格式设计的关键问题是: 在表数范围和表数精度给定的情况下,如何确定最短的尾数字长p和阶码 字长q 例 2.5:要求设计一种浮点数格式,其表数范围不小于 1037,正、负数对称, 表数精度不低于 10-16。 解:根据表数范围的要求: q 2 1 37 2 10 − 解这个不等式: q + = log(log /log ) log . 37 10 2 1 2 695 取阶码字长 q=7 根据表数精度的要求,得到: 1 2 2 1 16 10 − − (P ) −
解这个不等式 -log1o 16 =532 og 2 由于浮点数字长通常是8的倍数,因此取尾数字长p=55 所设计浮点数的格式如下: 1位1位7位 e 所设计浮点数的主要参数如下 最大尾数值:(-rmP)=(1-2-35) 绝对值最小的尾数值: 11 最大阶码:r2q-1=27-1=127 最小阶码:-r:9=-27=-128 最大正数:(1-rn)r9-=(1-25)2=(1-2527=170×103 最小正数:1 2=2-129=147×10-39 最大负数 2-129=-147×10 最小负数:-(1-m)n(1-2-5)2=-(1-23)217=-170×103 表数精度:δ=rm(p)=2-(53)=2-5=278×10-17; 浮点零:浮点零与机器零相同,64位全为0 表数效率:采用隐藏位,表数效率n=100% 6、浮点数的舍入处理 浮点数要进行舍入处理的原因是 十进制实数转化为浮点数时,有效位长度超过给定的尾数字长。 两个浮点数的加、减、乘、除结果,尾数长度超过给定的尾数字长 ·舍入处理要解决的问题是 把规格化尾数的p+g位处理成只有p位。 其中:p是浮点数表示方式给定的尾数字长 g是超过给定尾数字长的部分 ·舍入方法的主要性能标准是: 绝对误差小,积累误差小,容易实现 ·进行舍入处理时要注意的问题是 必须先规格化,然后再舍入,否则舍入是没有意义的。 在计算积累误差时,要同时考虑到正数区和负数区的情况 方法1:恒舍法 恒舍法又称截断法、必舍法等 2-6
2-6 解这个不等式: p − = − log log . 16 10 2 532 由于浮点数字长通常是 8 的倍数,因此取尾数字长 p=55 所设计浮点数的格式如下: 1 位 1 位 7 位 55 位 mf ef e M 所设计浮点数的主要参数如下: 最大尾数值: (1 ) (1 2 ) 55 − = − − p − rm 绝对值最小的尾数值: 1 1 rm 2 = 最大阶码: q re −1=2 −1=127 7 最小阶码:− = − = − q re 7 2 128 最大正数: 7 2 1 55 1 55 127 38 1 1 2 2 1 2 2 170 10 − − − − = − − − − ( p = = q rm r e m r ) ( ) ( ) . ; 最小正数: − − = − − = = 7 2 1 1 129 39 2 2 2 147 10 r r m e m q r . ; 最大负数: − − − =− − − =− =− 7 2 1 1 129 39 2 2 2 147 10 r r m e m q r . ; 最小负数: 7 2 1 55 1 55 127 38 1 1 2 2 1 2 2 170 10 − − − − − − − − − − ( p =− =− q rm r e m r ) ( ) ( ) . ; 表数精度: = = = − − − − − − = 1 1 2 2 2 2 78 10 1 55 1 55 17 r r m m ( p ) ( ) . ; 浮点零:浮点零与机器零相同,64 位全为 0; 表数效率:采用隐藏位,表数效率 = 100% ; 6、浮点数的舍入处理 • 浮点数要进行舍入处理的原因是: 十进制实数转化为浮点数时,有效位长度超过给定的尾数字长。 两个浮点数的加、减、乘、除结果,尾数长度超过给定的尾数字长。 • 舍入处理要解决的问题是: 把规格化尾数的 p+g 位处理成只有 p 位。 其中:p 是浮点数表示方式给定的尾数字长, g 是超过给定尾数字长的部分。 • 舍入方法的主要性能标准是: 绝对误差小,积累误差小,容易实现。 • 进行舍入处理时要注意的问题是: 必须先规格化,然后再舍入,否则舍入是没有意义的。 在计算积累误差时,要同时考虑到正数区和负数区的情况; 方法 1:恒舍法 恒舍法又称截断法、必舍法等
恒舍法的主要优点:实现起来非常容易。误差大。 恒舍法的舍入规则及误差情况 尾数有效字长p位有效字长之外g位误差情况 0.XxX....,,XX 000δ=0 XXX XX 00 001 6=-2p 数舍入前0.x 00.010|6=-29+1 区 XXX 11 1118=-2°(1-29) 舍入后0.xXx,…X G=-2p1(29-1) 0.XXX....,,XX 0008=0 负 0. xxx 001 6=+2-9 数舍入前一0.xXxX 010δ=+2p-9+1 XXX ∴Xx1.……1116=+2(1-29 舍入后|一0,xxxX G=+2p1(29-1) 方法2:恒置法 又称恒置r/2法、恒置1法、或冯诺依曼法 恒置法的舍入规则是:把规格化尾数有效字长p位的最低一位置成r/2。 恒置法的主要缺点:表数精度比较低。 主要优点:实现起来比较容易 在正数区和负数区的积累误差都比较小,而且能达到平衡。 恒置法在正数区的舍入规则及误差情况 E数区|尾数有效字长p位有效字长之外g位 吴差情况 0. XXX 00 +2p 误差积累 xXO 001 +2P(1-29 0.x…xx000 010 +2P(1-29 0. XXX +2P-9 舍入前0.x 100 2-p XXX xI 110 2?(1-29+1) 0. XXX 11 l11 2P(1-29 舍入后0.xxX XXI 积累误差σ=2卩 方法3:下舍上入法 又称为4舍5入法、0舍1入法、7舍8入法等 下舍上入法的舍入规则是:g位代码的中间值为界,小于这个中间值的则舍 大于或等于这个中间值的则入 下舍上入法的主要优点:精度高,积累误差小。 在正数区和负数区的积累误差能达到完全平衡 主要缺点:实现起来比较困难
2-7 恒舍法的主要优点:实现起来非常容易。误差大。 恒舍法的舍入规则及误差情况 尾数有效字长 p 位 有效字长之外 g 位 误差情况 正 数 区 舍入前 0.xxx......xx 0.xxx......xx 0.xxx......xx ...... 0.xxx......xx 00......000 00......001 00......010 ...... 11......111 =0 =-2 -p-g =-2 -p-g+1 ...... =-2 -p (1-2 -g ) 舍入后 0.xxx......xx =-2 -p-1(2 g-1) 负 数 区 舍入前 -0.xxx......xx -0.xxx......xx -0.xxx......xx ...... -0.xxx......xx 00......000 00......001 00......010 ...... 11......111 =0 =+2 -p-g =+2 -p-g+1 ...... =+2 -p (1-2 -g ) 舍入后 -0.xxx......xx =+2 -p-1(2 g-1) 方法 2:恒置法 又称恒置 r/2 法、恒置 1 法、或冯诺依曼法。 恒置法的舍入规则是:把规格化尾数有效字长 p 位的最低一位置成 r/2。 恒置法的主要缺点:表数精度比较低。 主要优点:实现起来比较容易, 在正数区和负数区的积累误差都比较小,而且能达到平衡。 恒置法在正数区的舍入规则及误差情况 正数区 尾数有效字长 p 位 有效字长之外 g 位 误差情况 舍入前 0.xxx......xx0 0.xxx......xx0 0.xxx......xx0 ...... 0.xxx......xx0 0.xxx......xx1 0.xxx......xx1 0.xxx......xx1 0.xxx......xx1 00......000 00......001 00......010 ...... 11......111 00......000 00......001 11......110 11......111 +2 -p —— 误差积累 +2 -p (1-2 -g ) +2 -p (1-2 -g+1) ...... +2 -p-g 0 -2 -p-g ...... -2 -p (1-2 -g+1) -2 -p (1-2 -g ) 舍入后 0.xxx......xx1 积累误差=2 -p 方法 3:下舍上入法 又称为 4 舍 5 入法、0 舍 1 入法、7 舍 8 入法等。 下舍上入法的舍入规则是:g 位代码的中间值为界,小于这个中间值的则舍, 大于或等于这个中间值的则入。 下舍上入法的主要优点:精度高,积累误差小。 在正数区和负数区的积累误差能达到完全平衡。 主要缺点:实现起来比较困难
上舍下入法的舍入规则及误差情况 匝数区尾数有效字长D位有效字长之外g位 0 0. 0. xxx 舍入前0.x.xx01 2P1(1-29) 0. xxx XX 000+2P1-—积累误差 0. XXX XX 10. 2P1(1-29) 0. 11...110+2°9+1 111 +2P-9 舍入后 最高位为0 积累误差σ=+2P-1 0.xXX..xX+2-p 最高位为1 方法4:R*舍入法 R*舍入法的优点:没有积累误差。精度很高 主要缺点:实现起来非常复杂,要判断g是否为10…00,采用下舍上入法 或恒置法,判断舍入后是否溢出,若溢出,要再次进行右规格化 只有少数巨型计算机(如BSP科学处理机)采用R*舍入法 R*舍入法的舍入规则及误差情况 舍入方法舍入前(p+g位)舍入后(p位) 误差情况 舍上入法0×x.×00.010.××x.x 0 下舍上入法0X×.x00.010xx,xx -2-p-9 下舍上入法0xx.x0.0100x×.xx 下舍上入法0xx.x×01.110x 2p-1(1-2-9 恒置1法0xx.x×010.000x×x. 2 恒置1法0Xx.x1.0010×x,x1 2-p 下舍上入法0xx.x×10.010×.xx+2°+201(1-29 下舍上入法0×x.×11.100x×.xX+20+2P9+1 舍上入法0xx.xx111110.0.x+20+2°9 方法5:查表法 位 又称ROM舍入法,PA舍入法等。叫上n位口位位[ 1 查表入法的主要优点: 通过修改ROM或PLA中的内容来 DM或PLA 使积累误差达到平衡。 2+字×n位 查表法继承了下舍上入法精度 高、积累误差小的优点,同时又克服 了它实现起来比较困难的缺点 查表法的原理框图
2-8 上舍下入法的舍入规则及误差情况 正数区 尾数有效字长 p 位 有效字长之外 g 位 误差 舍入前 0.xxx......xx 0.xxx......xx 0.xxx......xx ...... 0.xxx......xx 0.xxx......xx 0.xxx......xx ...... 0.xxx......xx 0.xxx......xx 00......000 00......001 00......010 ...... 01......111 10......000 10......001 11......110 11......111 0 -2 -p-g -2 -p-g+1 ...... -2 -p-1 (1-2 -g ) +2 -p-1—积累误差 +2 -p-1 (1-2 -g ) ...... +2 -p-g+1 +2 -p-g 舍入后 0.xxx......xx 0.xxx......xx+2 -p 最高位为 0 最高位为 1 积累误差=+2 -p-1 方法 4:R*舍入法 R*舍入法的优点:没有积累误差。精度很高。 主要缺点:实现起来非常复杂,要判断 g 是否为 10......00,采用下舍上入法 或恒置法,判断舍入后是否溢出,若溢出,要再次进行右规格化。 只有少数巨型计算机(如 BSP 科学处理机)采用 R*舍入法。 R*舍入法的舍入规则及误差情况 舍入方法 舍入前(p+g 位) 舍入后(p 位) 误差情况 下舍上入法 下舍上入法 下舍上入法 … 下舍上入法 恒置 1 法 恒置 1 法 下舍上入法 … 下舍上入法 下舍上入法 0.xxx...xx|00...00 0.xxx...xx|00...01 0.xxx...xx|0...010 … 0.xxx...xx|01...11 0.xxx...x0|10...00 0.xxx...x1|10...00 0.xxx...xx|10...01 … 0.xxx...xx|11...10 0.xxx...xx|11...11 0.xxx...xx 0.xxx...xx 0.xxx...xx … 0.xxx...xx 0.xxx...x1 0.xxx...x1 0.xxx...xx+2 -p … 0.xxx...xx+2 -p 0.xxx...xx+2 -p 0 -2 -p-g -2 -p-g+1 … -2 -p-1 (1-2 -g+1) +2 -p-1 -2 -p-1 +2 -p-1 (1-2 -g+1) … +2 -p-g+1 +2 -p-g 方法 5:查表法 又称 ROM 舍入法,PLA 舍入法等。 查表入法的主要优点: 通过修改 ROM 或 PLA 中的内容来 使积累误差达到平衡。 查表法继承了下舍上入法精度 高、积累误差小的优点,同时又克服 了它实现起来比较困难的缺点。 p 位 g 位 mx: ... ... m: 查表法的原理框图 (p-n)位 n 位 1位 g-1 位 ROM 或 PLA 2 n+1字×n 位 (p-n)位 n 位
n=2时查表法的舍入规则及误差情况分析 ROM地址舍入前(p+g位)舍入后(p位 误差情况 000xx…×00×x…×x×…×00 2P1(1-29+1)~0 }+2p-1 001xx…×Xxx…×01+ 011×x…×011xx×x…×x10|+2p9~21o 010×x…×010×x…X×x…×01 1(1-29+1) }+2P1 0|-201(1-29+1)~0 }+2p1 101xx…×101x×…“×xx…1×11+ 110xx…×110x….×xx…×11-20129+1)~0 11110×01101××11+2°(129)~-2a1}-2p1(29-1 关于舍入方法的主要结论 (1)恒置法虽有少量的积累误差,且损失一位精度,但由于实现起来很容易, 已普遍在小型及微型机中使用。 (2)R*舍入法是唯一一种积累误差能达到完全平衡的舍入方法,但由于实现 起来非常复杂,仅在极少数对误差要求非常高的具型计算机中才采用。 3)下舍上入法只有少量的积累误差,且精度也比较高,但实现起来很复杂, 在用软件实现的算法中经常采用 (4)查表法实现比较容易,积累误差很小,而且可以通过改变ROM或PLA中 的内容来修正积累误差,因此是一种很有前途的舍入方法 五种舍入方法的主要性能比较 舍入方法在正数区的误差范围正数区的积累误差实现的难易程度 恒舍法 2p(1-29)~0 +2p1(29-1) 最简单 恒置法 2(1-29)~+2+2 很简单 下舍上入法-201(1-291)~++2p1 很复杂 R*舍入法|-2P-1~+2p1 0 最复杂 查表法 2(1-29)~+2p1+2P1(2n-29) 般 p是规格化尾数有效位的字长,g是尾数有效字长之外的长度, n是查表法中ROM或PLA的字长 7、警戒位的设置方法 为了保证浮点数在运算和转换过程中的精度,在规定的尾数字长之外,运算 器中的累加器需要另外增加的长度称为警戒位( Guard Digit or Guard Bit)。 ·不设置警戒位,可能出现很大的误差。一个例子: 例1:0.10000000×20-0.11111101×21,没有警戒位时: 0.10000000×2 对阶:+1.10000001×20 求和: 0.00000001×2 左规 0.10000000×27 2-9
2-9 n=2 时查表法的舍入规则及误差情况分析 ROM地址 舍入前(p+g位) 舍入后(p位) 误差情况 000 001 010 011 100 101 110 111 xx…x00|0xx…x xx…x00|1xx…x xx…x01|0xx…x xx…x01|1xx…x xx…x10|0xx…x xx…x10|1xx…x xx…x11|0xx…x xx…x11|1xx…x xx…x00 xx…x01 xx…x01 xx…x10 xx…x10 xx…x11 xx…x11 xx…x11 -2 -p-1 (1-2 -g+1)~0 +2 -p-g~2 -p-1 -2 -p-1 (1-2 -g+1)~0 +2 -p-g~2 -p-1 -2 -p-1 (1-2 -g+1)~0 +2 -p-g~2 -p-1 -2 -p-1 (1-2 -g+1)~0 +2 -p (1-2 -g )~-2 -p-1 }+2 -p-1 }+2 -p-1 }+2 -p-1 }-2 -p-1 (2g -1) 关于舍入方法的主要结论: (1) 恒置法虽有少量的积累误差,且损失一位精度,但由于实现起来很容易, 已普遍在小型及微型机中使用。 (2) R*舍入法是唯一一种积累误差能达到完全平衡的舍入方法,但由于实现 起来非常复杂,仅在极少数对误差要求非常高的具型计算机中才采用。 (3) 下舍上入法只有少量的积累误差,且精度也比较高,但实现起来很复杂, 在用软件实现的算法中经常采用。 (4) 查表法实现比较容易,积累误差很小,而且可以通过改变 ROM 或 PLA 中 的内容来修正积累误差,因此是一种很有前途的舍入方法。 五种舍入方法的主要性能比较 舍入方法 在正数区的误差范围 正数区的积累误差 实现的难易程度 恒舍法 -2 -p(1-2 -g)~0 +2 -p-1(2 g-1) 最简单 恒置法 -2 -p(1-2 -g)~+2 -p +2 -p 很简单 下舍上入法 -2 -p-1(1-2 -g+1)~+ 2 -p-1 +2 -p-1 很复杂 R*舍入法 -2 -p-1~+2 -p-1 0 最复杂 查表法 -2 -p(1-2 -g)~+2 -p-1 +2 -p-1(2 n-2 g) 一般 p 是规格化尾数有效位的字长,g 是尾数有效字长之外的长度, n 是查表法中 ROM 或 PLA 的字长 7、警戒位的设置方法 为了保证浮点数在运算和转换过程中的精度,在规定的尾数字长之外,运算 器中的累加器需要另外增加的长度称为警戒位(Guard Digit or Guard Bit)。 • 不设置警戒位,可能出现很大的误差。一个例子: 例 1:0.10000000×2 0-0.11111101×2 -1,没有警戒位时: 0.10000000×2 0 对阶: +1.10000001×2 0 求和: 0.00000001×2 0 左规: 0.10000000×2 -7
设置一个警戒位时: 0.10000000×20 寸阶:+1.100000011×20 求和:0.000000011×2 左规:0.11000000×27 ·可能造成完全错误的运算结果 例2:0.1000×2125-0.1111×2124,设置一个警戒位时 0.1000×21 1.10001×2 求和:0.00001×2125 左规 0.1000×2121 不设置警戒位时,运算结果是0 0.1000×2125 对阶:+1.1000×2125 求和 0.0000×21 ·警戒位的用处只有两个: (1)用于左规格化时移入尾数有效字长内 2)用于舍入。 ·警戒位的来源有以下几个方面: (1)做加、减法时,因对阶从有效字长内移出去的部分。 (2)做乘法时,双倍字长乘积的低字长部分。 (3)做除法时,因没有除尽而多上商的几位 (4)右规格化时移出有效字长的那部分。 (5)从十进制转换成二进制时,尾数超出有效字长的部分。 ·加减法运算对警戒位的需要 (1)同号相加或异号相减,浮点数的尾数之和不需要左规格化 1≤1mA|<1,两数之和为:1≤|m+mB|<2, (2)同号相减或异号相加,阶差为0 例3:0.10001×20-0.10000×20=0.10000×24 0.10001×20 对阶:+1.10000×20 求和 0.00001×20 左规:0.10000×2 两个尾数之和最多左规格化p-1位,但是对阶时没有移出任何代码 警戒位有需要但没有来源,因此不必设置警戒位。 (3)同号相减或异号相加,阶差为1 例4:0.10000×20-0.11111×21=0.10000×25 0.100000×20 对阶:+1.100001×20 求和 0.000001×2 左规 0.100000× 2-10
2-10 设置一个警戒位时: 0.10000000 对阶:+1.10000001 ×2 0 1×2 0 求和: 0.00000001 左规: 0.11000000 1×2 0 ×2 -7 • 可能造成完全错误的运算结果。 例 2:0.1000×2 125-0.1111×2 124,设置一个警戒位时: 0.1000 对阶: +1.1000 ×2 125 1×2 125 求和: 0.0000 左规: 0.1000 1×2 125 ×2 121 不设置警戒位时,运算结果是 0。 0.1000×2 125 对阶: +1.1000×2 125 求和: 0.0000×2 125 • 警戒位的用处只有两个: (1) 用于左规格化时移入尾数有效字长内。 (2) 用于舍入。 • 警戒位的来源有以下几个方面: (1) 做加、减法时,因对阶从有效字长内移出去的部分。 (2) 做乘法时,双倍字长乘积的低字长部分。 (3) 做除法时,因没有除尽而多上商的几位。 (4) 右规格化时移出有效字长的那部分。 (5) 从十进制转换成二进制时,尾数超出有效字长的部分。 • 加减法运算对警戒位的需要 (1) 同号相加或异号相减,浮点数的尾数之和不需要左规格化。 1 rm ≤|mA|<1,两数之和为: 1 rm ≤|mA+mB|<2, (2) 同号相减或异号相加,阶差为 0 例 3:0.10001×2 0-0.10000×2 0=0.10000×2 -4 0.10001 对阶: +1.10000 ×2 0 ×2 0 求和: 0.00001 左规: 0.10000 ×2 0 ×2 -4 两个尾数之和最多左规格化 p-1 位,但是对阶时没有移出任何代码。 警戒位有需要但没有来源,因此不必设置警戒位。 (3) 同号相减或异号相加,阶差为 1 例 4:0.10000×2 0-0.11111×2 -1=0.10000×2 -5 p=5 g=1 0.10000 对阶: +1.10000 0×2 0 1×2 0 求和: 0.00000 左规: 0.10000 1×2 0 0×2 -4