《计算机组成原理》教程第3章下浮点数运算方法
计算机组成原理定点数浮点数等运算方法复习
3
记作 3 ≡ + 9 (mod 12) 同理 4 ≡ + 8 (mod 12)
时钟以 12为模
5 ≡ + 7 (mod 12)
结论 一个负数加上 “模” 即得该负数的补数
一个正数和一个负数互为补数时
它们绝对值之和即为 模 数
• 计数器(模 16) 1011
1011 – 1011
0000
0000 ?
[x]补 = 27+1 +( 1011000 ) = 100000000 1011000
1,0101000
小数
[x]补 =
x 2+x
1>x ≥0 0 > x ≥ 1(mod 2)
x 为真值 如 x = + 0.1110
x = 0.1100000
[x]补 = 0.1110
[x]补 = 2 + ( 0.1100000 ) = 10.0000000
5. 移码表示法
补码表示很难直接判断其真值大小
如 十进制
二进制
补码
x = +21 x = –21
+10101 – 10101
0,10101 错 1,01011 大
x = +31
+11111
0,11111 错
x = –31
– 11111
1,00001 大
x + 25
+10101 + 100000 = 110101
加
加法 正 负
减
加法 负 正
减
加法 负 负
加
正 可正可负 可正可负
负
能否 只作加法 ?
找到一个与负数等价的正数 来代替这个负数 就可使 减 加
《计算机组成原理》课后题答案_清华大学出版_秦磊华_吴非··
1.l 解释下列名词摩尔定律:对集成电路上可容纳的晶体管数目、性能和价格等发展趋势的预测,其主要内容是:成集电路上可容纳的晶体管数量每18个月翻一番,性能将提高一倍,而其价格将降低一半。
主存: 计算机中存放正在运行的程序和数据的存储器,为计算机的主要工作存储器,可随机存取。
控制器:计算机的指挥中心,它使计算机各部件自动协调地工作。
时钟周期:时钟周期是时钟频率的倒数,也称为节拍周期或T周期,是处理操作最基本的时间单位。
多核处理器:多核处理器是指在一枚处理器中集成两个或多个完整的计算引擎(内核)。
字长:运算器一次运算处理的二进制位数。
存储容量: 存储器中可存二进制信息的总量。
CPI:指执行每条指令所需要的平均时钟周期数。
MIPS:用每秒钟执行完成的指令数量作为衡量计算机性能的一个指标,该指标以每秒钟完成的百万指令数作为单位。
CPU时间:计算某个任务时CPU实际消耗的时间,也即CPU真正花费在某程序上的时间。
计算机系统的层次结构:计算机系统的层次结构由多级构成,一般分成5级,由低到高分别是:微程序设计级,机器语言级,操作系统级,汇编语言级,高级语言级。
基准测试程序:把应用程序中使用频度最高的那那些核心程序作为评价计算机性能的标准程序。
软/硬件功能的等价性:从逻辑功能的角度来看,硬件和软件在完成某项功能上是相同的,称为软/硬件功能是等价的,如浮点运算既可以由软件实现,也可以由专门的硬件实现。
固件:是一种软件的固化,其目的是为了加快软件的执行速度。
可靠性:可靠性是指系统或产品在规定的条件和规定的时间内,完成规定功能的能力。
产品可靠性定义的要素是三个“规定”:“规定条件”、“规定时间”和“规定功能”。
MTTF:平均无故障时间,指系统自使用以来到第一次出故障的时间间隔的期望值。
MTTR:系统的平均修复时间。
MTBF:平均故障间隔时间,指相邻两次故障之间的平均工作时间。
可用性:指系统在任意时刻可使用的概率,可根据MTTF、MTTR和MTBF等指标计算处系统的可用性。
浮点数的表示方法规格化处理
二:基础知识扩展
-----------------------------------------------------------------------
值存储为指数偏移量
real*41位符号位(s)、8位指数(e),23位尾数(m,共32位)127(7FH)
11………11
01………11
4标准表示法
为便于软件的移植,浮点数的表示格式应该有统一标准。1985年IEEE(Institute of Electrical and Electronics Engineers)提出了IEEE754标准。该标准规定基数为2,阶码E用移码表示,尾数M用原码表示,根据原码的规格化方法,最高数字位总是1,该标准将这个1缺省存储,使得尾数表示范围比实际存储的一位。实数的IEEE754标准的浮点数格式为:
[例3.2]:
0xC04E000000000000(real*8)
转换成二进制
1100000001001110000000000000000000000000000000000000000000000000
符号位指数部分(11位)尾数部分
1 10000000100 1110000000000000000000000000000000000000000000000000
计算公式:
V=(-1)^s*2^E*M
V=(-1)^s * 2^( 1 -指数偏移量) * (尾数)(当指数位为0时)
V=(-1)^s * 2^(指数位数值-指数偏移量) * (1+尾数)(当指数位不全为0或不全1)
情况1:当e(各位)为全'0'时:
E=1-(2^(e(位数)-1)-1);<===>E=1-指数偏移量
第3章运算方法和运算器讲义(计算机组成原理课件)
N → ½ 1 Cn 2A-B→ A 2C → C
A<0?
Y → ½ 0 Cn 2A+B→A 2C → C
CR+1→CR N
CR=n? Y A<0? N 1 → Cn XS⊕YS→ QS End Y 0→Cn A+B→A
24
原码不恢复余数法需要注意的问题:
(1) 在定点小数除法运算时,为了防止溢出,要求被除 数的绝对值小于除数的绝对值, |X|< |Y| ( |X|=|Y|除 外),且除数不能为0。 (2)在原码加减交替法中,当最终余数为负数时,必须 恢复一次余数,使之变为正余数,注意此时不需要再左移 了。
二、补码乘法
将此式展开,得到递推关系: [Z0]补=0 [Z1]补=2-1{[Z0]补+(yn+1-yn)[x]补} [Z2]补=2-1{[Z1]补+(yn-yn-1)[x]补} . . [Zn]补=2-1{[Zn-1]补+(y2-y1)[x]补} 从而得到: [x×y]补=[Zn]补+(y1-ys).[x]补 --------补码一位乘比较法
1.补码一位乘
• 用补码做加减运算很方便,做乘法(包括除法)却
是原码很方便,既然这样为何又有补码乘法呢?主 要为了避免频繁的码制转换。 被乘数x, [x]补=xs.x1…xn 乘数y, [y]补=ys.y1…yn • 校正法 ⑴ x任意,y>0时, [X×Y]补 = [Y]补× [Y]补 ⑵ x任意,y<0时, [X×Y]补 = [X]补× (0.y1…yn )+[-X]补
3
§3.3 定点乘法运算
X×Y=X×0.1011 =X×0.1+X×0.00+X×0.001+X×0.0001 =0.1{X+0.1[0+0.1(X+0.1×X)]} =2-1{X+2-1{0+2-1[X+2-1(X+0)]}} |X|×|Y| = |X|× (0.Y1Y2 … Yn )
计算机组成原理:浮点数表示及运算电子教案
负上溢
正上溢
-
最
负数 最
0
正数
最
最
+
小
大
小
大
负
负正正数 Nhomakorabea数
数
数
N=2E×M
|N|→∞ 产生正上溢或者负上溢
|N|→0 产生正下溢或者负下溢
计算机组成原理
3
机器字长一定时,阶码越长,表示范围越大,精度越低 浮点数表示范围比定点数大,精度高
8位定点小数可表示的范围
0.1000101010
把不满足这一表示要求的尾数,变成满足这一要求的尾数 的操作过程,叫作浮点数的规格化处理,通过尾数移位和修改 阶码实现。
计算机组成原理
5
规格化目的: 为了提高数据的表示精度 为了数据表示的唯一性 尾数为R进制的规格化: 绝对值大于或等于1/R
二进制原码的规格化数的表现形式:
正数 0.1xxxxxx 负数 1.1xxxxxx 补码尾数的规格化的表现形式:尾数的最高位与符号位相反。
0.0000001 --- 0.1111111
1/128 --- 127/128
设阶码2位,尾数4位 可表示2-11*0.0001 --- 211*0.1111
0.0000001 --- 111.1
设阶码3位,尾数3位 可表示2-111*0.001 --- 2111*0.111
0.0000000001 --- 1110000
指数e=阶码-127=10000010-01111111 =00000011=(3)10 包括隐藏位1的尾数: 1.M=1.011 0110 0000 0000 0000 0000=1.011011 于是有 x=(-1)s×1.M×2e
浮点数表示及运算
Emax=2046, f=1.1111…,1.111…1×22046-1023 =21023×(2-2-52)
负下溢出 零
负上溢出 可表示负数范围
正下溢出 可表示正数范围 正上溢出
ห้องสมุดไป่ตู้-(1-2-23) 2127
计算机组成原理
-0.52-128 0 0.52-128
(1-2-23) 2127
数轴
指数e=阶码-127=10000010-01111111 =00000011=(3)10 包括隐藏位1的尾数: 1.M=1.011 0110 0000 0000 0000 0000=1.011011 于是有 x=(-1)s×1.M×2e
=+(1.011011)×23=+1011.011=(11.375)10
计算机组成原理
12
单精度浮点数编码格式
符号位 0/1 0/1 0 1 0/1 0/1 0/1
阶码 255 255 255 255 1~254
0 0
尾数 非零1xxxx 非零0xxxx
0 0
f f (非零)
0
表示
NaN Not a Number sNaN Signaling NaN +∞ -∞ (-1)S× (1.f) 2 × (e-127) (-1)S× (0.f) 2 × (-126) +0/-0
正数 0.1xxxxxx 负数 1.0xxxxxx
计算机组成原理
6
例:对数据12310作规格化浮点数的编码,假定1位符号位,基 数为2,阶码5位,采用移码,尾数10位,采用补码。
解:12310=11110112= 0.11110110002×27 [7]移=10000+00111 = 10111 [0.1111011000]补=0.1111011000 [123]浮= 1011 1 0 11 1101 1000
浮点数的表示和计算
浮点数的表示和计算《计算机组成原理》实验报告报告创建时间:2014.12.30示和计算。
二、实验项目内容假设没有浮点表示和计算的硬件,用软件方法采用仿真方式实现IEEE 754单精度浮点数的表示及运算功能,具体要求如下:(1) 程序需要提供人机交互方式(GUI或者字符界面)供用户选择相应的功能;(2) 可接受十进制实数形式的输入,在内存中以IEEE 754单精度方式表示,支持以二进制和十六进制的方式显示输出;(3) 可实现浮点数的加减乘除运算;(4) 可以使用80X86或MIPS或ARM汇编指令,但是不能使用浮点指令,只能利用整数运算指令来编写软件完成。
三、实验过程或算法(源程序)1. 本次项目我们采用单精度浮点数格式读入两个浮点数,并读入一个操作符,然后根据操作符类型选择运算类型,加法指令如下:sum: subu $sp, $sp, 32sw $ra, 20($sp)sw $fp, 16($sp)addiu $fp, $sp, 28sw $a0, 0($fp) #calculate the first numberandi $s2, $s0, 0x80000000 # s2 is the signsrl $s2, $s2, 31andi $s3, $s0, 0x7f800000 # s3 is the exponentsrl $s3, $s3, 23andi $s4, $s0, 0x007fffff # s4 is the fractionaddi $s4, $s4, 0x00800000#calculate the second numberandi $s5, $s1, 0x80000000 # s5 is the signsrl $s5, $s5, 31andi $s6, $s1, 0x7f800000 # s6 is the exponentsrl $s6, $s6, 23andi $s7, $s1, 0x007fffff # s7 is the fractionaddi $s7, $s7, 0x00800000sub $t0, $s3, $s6blt $t0, 0, s umL1 # add subbgt $t0, 0, s umL2 # sub addbeq $t0, 0, s umL32. 减法指令如下:mysub: subu $sp, $sp, 32sw $ra, 20($sp)sw $fp, 16($sp)addiu $fp, $sp, 28sw $a0, 0($fp)#calculate the first numberandi $s2, $s0, 0x80000000 # s2 is the signsrl $s2, $s2, 31andi $s3, $s0, 0x7f800000 # s3 is the exponentsrl $s3, $s3, 23andi $s4, $s0, 0x007fffff # s4 is the fractionaddi $s4, $s4, 0x00800000#calculate the second numberxori $s5, $s1, 0x80000000 # s5 is the signsrl $s5, $s5, 31andi $s6, $s1, 0x7f800000 # s6 is the exponentsrl $s6, $s6, 23andi $s7, $s1, 0x007fffff # s7 is the fractionaddi $s7, $s7, 0x00800000sub $t0, $s3, $s6blt $t0, 0, s ubL1 # +,-bgt $t0, 0, s ubL2 # -,+beq $t0, 0, s ubL3 # +,+ or -,-3.乘法指令如下:mutilStart: srl $t2, $s0, 31srl $t3, $s1, 31sll $t4, $s0, 1srl $t4, $t4, 24 # expsll $t5, $s1, 1srl $t5, $t5, 24 # exp # 0...1fracsll $t6, $s0, 9srl $t6, $t6, 9ori $t6, $t6, 0x00800000sll $t6, $t6, 8addi $t4, $t4, 1 #0...1fracsll $t7, $s1, 9srl $t7, $t7, 9ori $t7, $t7, 0x00800000sll $t7, $t7, 8addi $t5, $t5, 1sub $t4, $t4, 127add $t4, $t4, $t5 # final expsub $t5, $t5, $t5mutilCompareSign:add $t2, $t2, $t3 sll $t2, $t2, 31 # final signmultu $t6, $t7mfhi $t5#regularandi $t8, $t5, 0x80000000beq $t8, 0x80000000, mutilnextsll $t5, $t5, 1sub $t4, $t4, 1mutilnext: sll $t5, $t5, 1#IEEE754sub $t4, $t4, 1srl $t5, $t5, 9# final fractionmutilFinal: sll $t4, $t4, 24srl $t4, $t4, 1addu $t2, $t2, $t4addu $t2, $t2, $t5 # resultadd $s2, $t2, $zero # save resultli $v0, 4la $a0, m sg3syscallli $v0, 2mtc1 $t2, $f12syscallla $a0, m sg0 # new lineli $v0, 4syscalllw $ra, 20($sp)lw $fp, 16($sp)addiu $sp, $sp, 32jr $ra4. 除法指令如下:divideStart: srl $t2, $s0, 31 srl $t3, $s1, 31sll $t4, $s0, 1srl $t4, $t4, 24 # expsll $t5, $s1, 1srl $t5, $t5, 24 # expsll $t6, $s0, 9srl $t6, $t6, 9ori $t6, $t6, 0x00800000sll $t7, $s1, 9srl $t7, $t7, 9ori $t7, $t7, 0x00800000sub $t4, $t4, $t5 # final expaddi $t4, $t4, 127sub $t5, $t5, $t5divideCompareSign:add $t2, $t2, $t3 sll $t2, $t2, 31 # final signsub $t8, $t8, $t8 # use to recorddividsub $t3, $t3, $t3 # use to record remaindersub $t5, $t5, $t5 # use as counterdividecompare: bge $t5, 24,dividebreakout #compare the two numberblt $t6, $t7, d ividelowerdividegreater: sub $t6, $t6, $t7#divide is lowersll $t6, $t6, 1sll $t8, $t8, 1addi $t8, $t8, 1addi $t5, $t5, 1j d ividecomparedividelower: sll $t6, $t6, 1sll $t8, $t8, 1addi $t5, $t5, 1j dividecomparedividebreakout: blt $t8, 0x00800000, dividedoSllbge $t8, 0x01000000, dividedoSrlj d ivideresultdividedoSll: sll $t8, $t8, 1subi $t4, $t4, 1blt $t8, 0x00800000, dividedoSllj d ivideresultdividedoSrl: srl $t8, $t8, 1addi $t4, $t4, 1bge $t8, 0x01000000, dividedoSrlj d ivideresultdivideresult: bgt $t4, 255,divideoverFlowsll $t8, $t8, 9srl $t8, $t8, 9sll $t4, $t4, 24srl $t4, $t4, 1add $t2, $t2, $t4add $t2, $t2, $t8add $s2, $t2, $zero # save resultli $v0, 4la $a0, m sg3#output messagesyscallli $v0, 2mtc1 $t2, $f12syscallj diviedend5. 十进制转换为二进制指令如下:dex2: subu $sp, $sp, 32sw $ra, 20($sp)sw $fp, 16($sp)addiu $fp, $sp, 28sw $a0, 0($fp)add $a0, $s2, $zeroadd $t9, $zero, $a0sub $t6, $t6, $t6 # set $t6=0sub $t7, $t7, $t7 # set $t7=0addi $t5, $zero, 32 # set$t5=32 as a counteraddi $t8, $zero, 0x80000000 # set$t8=1000 0000 0000 0000 00000000 0000 0000beginLoop: addi $t5, $t5, -1 # counter --and $t7, $t8, $t9srl $t8, $t8, 1srlv $t7, $t7, $t5add $a0, $t7, $zero#output one bitli $v0, 1syscallbeq $t5, $t6, E xist #if equals jump existj b eginLoop6. 十进制转换为十六进制指令如下:dex16: subu $sp, $sp, 32sw $ra, 20($sp)sw $fp, 16($sp)addiu $fp, $sp, 28sw $a0, 0($fp)sub $t0, $t0, $t0 # use as countersrloop: bge $t0, 8, d ex16end #16 addi $t0, $t0, 1srl $t1, $s2, 28sll $s2, $s2, 4bgt $t1, 9, o utcharli $v0, 1add $a0, $t1, $zerosyscallj srloopoutchar: addi $t1, $t1, 55 # change to charli $v0, 11add $a0, $t1, $zerosyscallj srloopdex16end:la $a0, m sg0 # new line li $v0, 4syscalllw $ra, 20($sp)lw $fp, 16($sp)addiu $sp, $sp, 32jr $ra四、实验结果及分析和(或)源程序调试过程1. 实验结果:本次实验我们以十进制实数形式的输入两个浮点数,在内存中以IEEE 754单精度方式表示,执行运算操作后,以十进制形式把结果输出,并且可以以二进制和十六进制的方式显示输出,下图是执行加法运算,并输出二进制形式:下图是执行乘法操作,并输出十六进制形式:减法运算如下图:除法运算如下图:当输入错误,如除数为0时,会显示错误信息并退出,如下图:2. 实验分析:本次实验我们使用MIPS汇编指令,利用整数运算指令来编写了一个浮点数运算程序,通过在MARS 4.4软件上进行调试运行,得到了正确结果,本次实验实现了以下功能:(1) 程序提供了人机交互方式(字符界面)供用户选择相应的功能;(2) 接受十进制实数形式的输入,在内存中以IEEE 754单精度方式表示,支持以二进制和十六进制的方式显示输出;(3) 实现了浮点数的加减乘除运算;(4) 没有使用浮点指令,只利用了整数运算指令来完成软件的编写。
计算机组成原理计算机的运算方法(共56张PPT)精选全文
10 0001 0000
0000
0001
……
……
1001
1010
0
00110000
1
00110001
……
9
00111001
A
16 0001 0110
1111
F
由于ASCII码低四位与BCD码相同,转换方便。 ASCII码左移四位得BCD码, BCD码前加0011得ASCII码。
一般采用二进制运算的计算机中不采用BCD码,矫正不方便。 商用计算机中采用BCD码,专门设置有十进制运算电路。
八进制数与十六进制数之间,可将二进制数作为中介进行转换。
、数值的处理(数制转换)
3) BCD码(十进制):P214-215
如果计算机以二进制进行运算和处理时,只要在输入输出处理时进
行二 / 十进制转换即可。
但在商业统计中,二 / 十进制转换存在两个问题:
(1)转换占用实际运算很大的时间; (2)十进制的,无法用二进制精确表示;
例:将(0. 1)10转换成二进制数 ( 要求5位有效位) 。
结果
0.1×2
最高位 0 .2×2
… 0 .4×2
0 .8×2
1 .6×2
1 .2×2
0 .4×2
直到乘积的小数部分为0,
或结果已满足所需精度要求为止.
0 .8×2
最低位 1 .6000
可能永远乘不完,小数部分不为0, 意味存在一点误差。
2 105
余数
结果
2 52
1
2 26
0
2 13
0
26
1
23
0
21
1
0
1
直到商等于0为止
计算机组成原理第3章 运算器和运算方法
第三章运算方法和运算器3.1补码的移位运算1、左移运算:各位依次左移,末位补0对于算术左移,若没有改变符号位,左移相当于乘以2。
2、右移运算:算术右移:符号位不变,各位(包括符号位)依次右移。
(相当于除以2)逻辑右移:最高位补0,其余各位依次右移例1:已知X=0.1011 ,Y=-0.0101 求 [0.5X]补;[0.25X]补;[-X]补;2[-X]补;[0.5Y]补;[0.25Y]补; [-Y]补;2[-Y]补[X]补=0.1011 [Y]补=1.1011[0.5X]补=0.01011 [0.5Y]补=1.11011[0.25X]补=0.001011 [0.25Y]补=1.111011[-X]补=1.0101 [-Y]补=0.01012[-X]补=0.1010 (溢出) 2[-Y]补=0.10103.2定点加减法运算及其实现3.2.1 补码加减法运算方法由于计算机中的进行定点数的加减运算大都是采用补码。
(1)公式:[X+Y]补=[X]补+[Y]补[X-Y]补=[X]补+[-Y]补(证明过程见教材P38)例1 X=0.001010 Y=-0.100011 求[X-Y]补,[X+Y]补解:[X]补=0.001010 [-Y]补=0.100011则 [X-Y]补=[X]补+[-Y]补=0.001010 + 0.100011=0.101101 [X]补=0.001010 [Y]补=1.011101则 [X+Y]补=[X]补+[Y]补=0.001010 + 1.011101=1.100111例2:已知X=+0.25,Y=-0.625,求X+Y; X-Y写出计算的过程.例3:已知X=25,Y=-9,求X+Y; X-Y写出计算的过程.例4:已知X=-25,Y=-9,求X+Y; X-Y写出计算的过程.解: (8位二进制表示)例2: X=0.0100000 Y=-0.1010000[X]补=0.0100000 [Y]补=1.0110000则 [X+Y]补=[X]补+[Y]补=0.0100000 + 1.0110000=1.1010000[X+Y]原=-0.0110000=(-0.375)D[X]补=0.0100000 ,[-Y]补=0.1010000则 [X-Y]补 = [X]补+[-Y]补 = 0.0100000+0.1010000=0.1110000[X+Y]原 = 0.1110000 =(0.875)D例3: X=+0011001 Y=-0001001[X]补=00011001,[Y]补=11110111则 [X+Y]补 = [X]补+[Y]补= 00011001 + 11110111= 00010000[X+Y]原 =+0010000=(+16)D[X]补= 00011001 ,[-Y]补= 00001001则 [X-Y]补 = [X]补+[-Y]补= 00011001 + 00001001= 00100010[X+Y]原 = +0100010 =(34)D例4: X=-0011001 Y=-0001001[X]补=11100111,[Y]补=11110111则 [X+Y]补 = [X]补+[Y]补= 11100111 + 11110111[X+Y]原 =-00100010=(-34)D[X]补= 11100111 ,[-Y]补= 00001001则 [X-Y]补 = [X]补+[-Y]补= 11100111 + 00001001= 11110000[X+Y]原 = -0010000 =(-16)D3.2.2 定点加减法运算中的溢出问题溢出:运算结果大于机器所能表示的最大正数或者小于机器所能表示的最小负数.溢出只是针对带符号数的运算.比如:[X]补=0.1010,[Y]补=0.1001,那么[X]补+[Y]补=1.0011(溢出)溢出是一种错误,计算机中运算时必须能够发现这个现象,并加以处理判断溢出的方法:1、采用变形补码法[X+Y] 变补=[X] 变补+[Y] 变补[X-Y] 变补=[X] 变补+[-Y] 变补例1 X=0.1011 Y=0.0011 求[X+Y]补解: [X]变补 = 00.1011, [Y]变补 = 00.0011[X+Y]变补 = 00.1011 + 00.0011 = 00.1110所以 [X+Y]补 = 0.1110例2 X=0.1011 Y=0.1001 求[X+Y]补解: [X]变补 = 00.1011 [Y]变补 = 00.1001[X+Y]变补 = 00.1011 + 00.1001 = 01.0100运算结果的两符号位是01,不相同,发生溢出,因第一符号位是0,代表正数,所以称这种溢出为“正溢出”。
计算机组成原理浮点数运算
计算机组成原理浮点数运算
在计算机组成原理中,浮点数的运算涉及到数值的表示、加减运算等多个方面。
以下是浮点数运算的基本过程:
1. 对阶:在进行浮点数运算时,需要先对参与运算的浮点数的阶码进行对齐,即比较两个阶码的大小,将阶码较小的数向右移动,使得两个数的阶码相等。
2. 尾数运算:对阶完成后,进行尾数的加减运算。
尾数通常使用补码表示,加减运算规则与定点数的补码加减运算规则相同。
3. 结果格式化:根据尾数运算结果的符号和数值大小,确定最终结果的格式。
如果尾数的结果为正,则结果的格式与源码相同;如果尾数的结果为负,则结果的格式与补码相同。
浮点数的范围和精度由阶码和尾数的位数决定。
阶码的位数能够决定数的范围,尾数的位数决定数的有效精度。
在实际应用中,需要根据具体需求选择合适的浮点数表示方式和运算方法。
(完整版)计算机组成原理知识点总结
第2章数据的表示和运算主要内容:(一)数据信息的表示1.数据的表示2.真值和机器数(二)定点数的表示和运算1.定点数的表示:无符号数的表示;有符号数的表示。
2.定点数的运算:定点数的位移运算;原码定点数的加/减运算;补码定点数的加/减运算;定点数的乘/除运算;溢出概念和判别方法。
(三)浮点数的表示和运算1.浮点数的表示:浮点数的表示范围;IEEE754标准2.浮点数的加/减运算(四)算术逻辑单元ALU1.串行加法器和并行加法器2.算术逻辑单元ALU的功能和机构2.3 浮点数的表示和运算2.3.1 浮点数的表示(1)浮点数的表示范围•浮点数是指小数点位置可浮动的数据,通常以下式表示:N=M·RE其中,N为浮点数,M为尾数,E为阶码,R称为“阶的基数(底)”,而且R为一常数,一般为2、8或16。
在一台计算机中,所有数据的R都是相同的,于是不需要在每个数据中表示出来。
浮点数的机内表示浮点数真值:N=M ×2E浮点数的一般机器格式:数符阶符阶码值 . 尾数值1位1位n位m位•Ms是尾数的符号位,设置在最高位上。
•E为阶码,有n+1位,一般为整数,其中有一位符号位EJ,设置在E的最高位上,用来表示正阶或负阶。
•M为尾数,有m位,为一个定点小数。
Ms=0,表示正号,Ms=1,表示负。
•为了保证数据精度,尾数通常用规格化形式表示:当R=2,且尾数值不为0时,其绝对值大于或等于0.5。
对非规格化浮点数,通过将尾数左移或右移,并修改阶码值使之满足规格化要求。
浮点数的机内表示阶码通常为定点整数,补码或移码表示。
其位数决定数值范围。
阶符表示数的大小。
尾数通常为定点小数,原码或补码表示。
其位数决定数的精度。
数符表示数的正负。
浮点数的规格化字长固定的情况下提高表示精度的措施:•增加尾数位数(但数值范围减小)•采用浮点规格化形式尾数规格化:1/2≤M <1 最高有效位绝对值为1浮点数规格化方法:调整阶码使尾数满足下列关系:•尾数为原码表示时,无论正负应满足1/2 ≤M <1即:小数点后的第一位数一定要为1。
计算机组成原理与系统结构运算方法与运算器
3.3.1 浮点加减运算
1. 浮点数加减法的运算法则
1) 对阶 2) 尾数进行加(减)运算 3) 规格化
(1) 左规。 (2) 右规。
4) 舍入处理
(1) 截(尾)断法 (2) 末位恒置1法 (3) 0舍1入法
20
2. 浮点数加减法 运算流程
3.3.1 浮点加减运算
3. 浮点数加减法 运算实例
1) 行波进位加法器 2) 先行进位加法器
3.1.1 加减运算
5
3.1.1 加减运算
5. BCD数加法器
1) 概述
2) 8421 BCD码
(1) 定义。
(2) 加法运算。
(3) 校正。
6. 移码加减运算
1) 运算法则
2) 移码运算应注意的问题
6
1. 原码一位乘法运算
1) 原码一位乘法的法则 2) 原码一位乘法的实现思路
3.2.1 单元电路
15
1. 74181的引线
3.2.2 算术单元
2. 级联工作
16
1. 三种基本结构
3.2.3 运算器的结构
17
2. 计算机简化框图
3.2.3 运算器的结构
18
3.3 浮 点 运 算
有关浮点数的定义、 规格化等问题已在第 2章中作了详细说明, 本节只描述浮点数的 各种运算。
(1) 手工乘法运算。 (2) 思路流程。
3) 原码一位乘法器框图
3.1.2 乘法运算
7
3.1.2 乘法运算
2. 原码二位乘法运算 3. 补码一位乘法运算
1) 校正法 2) 布斯法
(1) 算法法则。 (2) 补码一位乘法器(布斯法)框图。
8
4. 补码二位乘法运算 5. 阵列乘法器
计算机组成原理定点数、浮点数等运算方法复习
大
正确
(1) 移码定义 [x]移 = 2n + x(2n>x ≥ 2n)
x 为真值,n 为 整数的位数 移码在数轴上的表示
0 2
n
2
n+1
–1 [x]移码
–2
n
0
2 –1
n
真值
如
x = 10100 [x]移 = 2 + 10100 = 1,10100 x = –10100 [x]移 = 25 – 10100 = 0,01100
(3) 真值、补码和移码的对照表
真值 x ( n =5 ) -100000 - 11111 - 11110 - 00001 ± 00000 + 00001 + 00010 + 11110 + 11111 … …
[x]补
100000 100001 100010 111111 000000 000001 000010 011110 011111 … …
+ 0.1011 – 0.1011 + 1100 – 1100
0 1011
小数点的位置
1 1011
小数点的位置
0 1100
小数点的位置
1 1100
小数点的位置
2. 原码表示法
(1) 定义
整数
[x]原 =
x 为真值 如 x = +1110
x = 1110
0, x 2
n
2n > x ≥ 0 0 ≥x> 2
和数值部分隔开
(4) 求补码的快捷方式
设x= 1010 时
4+1
1010 则[x]补 = 2 = 100000 1010 = 1,0110 又[x]原 = 1,1010
计算机组成原理 Lecture_3_浮点数的表示_-_作业参考答案
{ int i;
float result=0;
for (i=0;i<=len-1;i++) result+=a[i];
return result;
} 解:len为unsigned类型,因此,len为0时,len-1的值为FF..FH,
假定一台32位字长的机器中带符号整数用补码表示浮点数用ieee754标准表示寄存器r1和r2的内容分别为r1
作业3
3-1. 将下列十进制数表示成浮点规格化数,阶码4位(含符 号),分别用补码和移码表示;尾数6位(含符号),用 补码表示。
(1)19/512 (2) -19/512
3-2. 浮点数阶码4位(含阶符),尾数9位(含数符),均用补码表 示,求规格化和非规格化时数值范围。
2-1
尾数用补码,不规格化,其表示范围:
0,111 23-1
0.11111111 1-2-8
1.00000000 -1
1.11111111 0 0.00000001
-2-8
2-8
0.11111111 1-2-8
正最大:尾数正最大*2阶正最大 正最小:尾数正最小*2阶负最小 负最大:尾数负最大*2阶负最小 负最小:尾数负最小* 2阶正最大
float result=0; for (i=0;i<=len-1;i++) result+=a[i]; return result; }
思考!
#include "stdafx.h"
#include<iostream>
using namespace std;
浮点数加减运算
出等步骤。设浮点数的阶码和尾数均采用补码表示,且位数分别为5位和7
位(均含2位符号位)。若有两个数X=27×29/32,Y=25×5/8,则用浮点
加法计算X+Y的最终结果是:
A.00111 1100010 B. 00111 0100010 C.01000 0010001 D. 发生溢出 解题思路: • X= 2 00111 × 0.11101; Y = 2 00101 × 0.101 ;对阶后大的阶码为00111 • 位数相加后的结果为:01.00010, • 尾数需右移规格化,同时阶码加1后变成 01 000
[X+ Y]补= 00 011 ,11 . 000101011
4) 舍入 ( 0 舍 1入)
在结果尾数的最低位加1,最后的结果为: [X+ Y]补= 00 011 ,11 . 00010110 X+Y = – 0.11101010 2 011
第三章 3.7 浮点数加减运算
4
浮点数加减运算举例
例2 浮点数加减运算过程一般包括对阶、尾数运算、规格化、舍入和判溢
第三章 3.7 浮点数加减运算
4
浮点数加减运算举例
例 设 x = 2 010 × 0.11011011 y = 2 100 × (- 0.10101100) 求 x+y
2)尾数运算 00.00110110 11 + 11.01010100 11.1000101011 3) 尾数规格化处理
分析发现,只左移一次即可达到规格化要求。规格化后的结果为:
计算机组成原理
第三章 运算方法与运算器
3.7 浮点数加减运算
第三章 3.7 浮点数加减运算
1
规格化浮点数的概念
计算机浮点运算详解深入学习计算机组成原理
深入剖析浮点运算性能优化
04
策略
减少不必要的数据转换和传输延迟
数据重用
避免不必要的数据类型转换
尽量保持数据在运算过程中的类型一致,避免频繁 进行数据类型转换,以减少转换带来的性能开销。
通过缓存最近使用过的数据,减少从主存中 加载数据的次数,从而降低数据传输延迟。
优化数据布局
合理安排数据在内存中的布局,使得访问局 部性更好,减少缓存失效和页面换入换出的 次数。
性能问题
浮点运算通常比整数运算更复杂,需要更多的CPU周期和内存带宽。这可能导致性能瓶颈,特别是在需要大量浮点运 算的应用中。
兼容性问题
不同的计算机系统和编程语言可能采用不同的浮点表示方法和运算规则,这可能导致兼容性问题。例如, 一个系统上的计算结果可能在另一个系统上无法重现。
未来发展趋势预测及建议
• 精度提升:随着计算机硬件和算法的不断进步,未来浮点运算的精度将得到进 一步提升。例如,采用更高精度的浮点数表示方法和更精确的运算算法。
• 性能优化:为了提高浮点运算的性能,未来可能会采用更高效的硬件设计、并 行计算技术和优化算法。例如,利用GPU和TPU等专用硬件加速浮点运算, 以及采用分布式计算等技术提高大规模浮点运算的效率。
进行实验和编程实践
通过编写程序和使用相关工具 进行实验,加深对浮点数运算 的理解和掌握程度。
THANKS
感谢观看
数值积分与微分
利用浮点运算进行数值积分和微 分,可以求解函数的定积分、不 定积分、导数等。
图形图像处理领域应用
01
3D图形变换
02
03
图像滤波与处理
计算机视觉
在3D图形处理中,浮点运算用于 实现各种复杂的图形变换,如旋 转、缩放、平移等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
规格化又分左规和右规两种。
① 左规。当尾数出现00.0××…×或11.1××…×时,需
左规。左规时尾数左移一位,阶码减1,直到符合补码 规格化表示式为止。 ② 右规。当尾数出现01.××…×或10.××…×时,表示 尾数溢出,这在定点加减运算中是不允许的,但在浮 点运算中这不算溢出,可通过右规处理。右规时尾数 右移一位,阶码加1。
2. 尾数求和
将对阶后的两个尾数按定点加(减)运算规则进 行运算。
注意:并不考虑溢出——溢出由阶码决定
接上例,两数对阶后得: [x]ˊ补=00,11;00.0011 [y]补=00,11;11.0110 则[Sx+Sy]补=00.0011+11.0110=11.1001 即[x+y]补=00,11;11.1001
若机器数为补码,尾数为规格化形式,并假设阶符取 2位,阶码取7位,数符取2位,尾数取n位,则它们能 表示的补码在数轴上的表示范围如下图。
A最小负数 2+127×(-1) B最大正数 2+127×(1-2-n) a最大负数 2-128×(-2-1-2-n) b最小正数 2-128×2-1
浮点机的溢出与否可由阶码的符号决定。即 阶码[j]补=01,××…×为上溢。 阶码[j]补=10,××…×为下溢,按机器零处理。 当阶符为“01”时,需做溢出处理。
2.
3.
规格化,为增加有效数字的位数,提高运算精度,必须将求和 (差)后的尾数规格化。
舍入,为提高精度,要考虑尾数右移时丢失的数值位。 判断结果 ,即判断结果是否溢出
4.
5.
1. 对阶
小阶向大阶看齐,阶码较小的数,其尾
这一步操作是将两个加数的小数点对齐。
数向右移,每右移一位,阶码加“1”, 直到两数阶码相同为止。
浮点数加减运算流程
浮点加减法运算
1.
大型计算机和高档微型机中,浮点加减法运算是由 硬件完成的。低档的微型机浮点加减法运算是由软 件完成的,但无论用硬件实现或由软件实现加减法 运算,基本原理是一致的。
浮点加减法运算要经过对阶、尾数求和、规格化、 舍入和溢出判断五步操作。其中尾数运算与定点加 减法运算相同,而对阶、舍入、规格化和溢出判断, 则是浮点加减法与定点加减法运算不同的操作。 在补码浮点运算中,阶码与尾数可以都用补码表示。 在硬件实现的运算中,阶符和数符常常采取双符号 位,正数数符用00表示,负数数符用11表示。
下溢时,浮点数值趋于零,故机器不做溢出处理, 仅把它作为机器零。 上溢时才是浮点数真正溢出,机器需停止运算, 作溢出中断处理。
一般×(-0.101000),y=2-100×(+0.111011),并假设 阶符取2位,阶码取3位,数符取2位,尾数取6位,求x-y。
2. 尾数运算
(1)浮点乘法尾数运算 (2)浮点除法尾数运算
(1)浮点乘法尾数运算
预处理:检测两个尾数中是否有一个为0, 若有一个为0,乘积必为0,不再作其他操 作;如果两尾数均不为0,则可进行乘法运 算。 相乘:两个浮点数的尾数相乘可以采用定 点小数的任何一种乘法运算来完成。 规格化:相乘结果可能要进行左规,左规 时调整阶码后如果发生阶下溢,则作机器 零处理;如果发生阶上溢,则作溢出处理。
解:由x=2-101×(-0.101000),y=2-100×(+0.111011) 得[x]补=11,011;11.011000,[y]补=11,100;00.111011 ①对阶 [Δj]补=[jx]补-[jy]补=11,011+00,100=11,111 即Δj=-1,则x的尾数向右移一位,阶码相应加1,即 [x]ˊ补=11,100;11.101100 ②求和 [Sx]ˊ补-[Sy]补=[Sx]补+[-Sy]补 =11.101100+11.000101 =10.110001 即 [x-y]补=11,100;10.110001 尾数符号位出现“10”,需右规。
4. 舍入—常用的舍入方法
“0舍1入”法:“0舍1入”法类似于十进制运算 中的“四舍五入”法,即在尾数右移时,被移去 的最高数值位为0,则舍去;被移去的最高数值 位为1,则在尾数的末位加1。这样做可能使尾数 又溢出,此时需再做一次右规。
特点:最大误差是最低位上的-1/2到接近于1/2之间, 正误差可以和负误差抵消。属于比较理想的方法,但 实现起来比较复杂。
同理,当作除法运算时,商的阶码可用下式完成: [jx]移+[-jy]补 = [jx - jy]移
阶码运算
阶码运算方法:进行移码加减运算时,只需将移 码表示的加数或减数的符号位取反(即变为补码), 然后进行运算,就可得阶和(或阶差)的移码。
溢出判断:在原有移码符号位的前面(即高位)再 增加位符号位,并规定该位恒用“0”表示,而加 数或减数的补码的两位符号位则一致。
浮点加减运算
设两个浮点数
x Sx r
y Sy r
①
jx
jy
②
尾数的加减运算规则与定点数完全相同。 当两浮点数阶码不等时,因两尾数小数 点的实际位置不一样,尾数部分无法直 接进行加减运算。
浮点加减运算的步骤
1.
对阶,使两数的小数点位置对齐。
尾数求和,将对阶后的两尾数按定点加减运算规则求和(差)。
舍入操作实例
[x]补舍入前 1.01110000 1.01111000 1.01110101 1.01111100 舍入后 1.0111(不舍不入) 1.0111 (舍) 1.0111 (舍) 1.1000 (入) 对应的真值 -0.1001 -0.1001 -0.1001 -0.1000 对应的真值
尾数右移时可能会发生数码丢失,影响
精度。
例:两浮点数x=0.1101×201, y=-(0.1010)×211,求x+y。
(1)首先写出x、y在计算机中的补码表示。 [x]补=00,01;00.1101,[y]补=00,11;11.0110 (2)在进行加法前,必须先对阶,故先求阶差: [Δj]补=[ix]补-[jy]补=00,01+11,01=11,10 即Δj=-2,表示x的阶码比y的阶码小,再按小阶向 大阶看齐的原则,将x的尾数右移两位,其阶码加2。 得[x]'补=00,11;00,0011 此时,Δj=0,表示对阶完毕。
溢出的条件是运算结果移码的最高符号位为1。此时 若低位符号位为0,表示上溢;低位符号位为1,表示 下溢。 如果运算结果移码的最高符号位为0,即表明没溢出。 此时若低位符号位为1,表明结果为正:低位符号位 为0,表示结果为负。
阶码运算
溢出判断举例: 设阶码取三位(不含符号位), 当jx=+101,jy=+110时,有 [jx]移=01,101, [jy]补=00,110 则: [jx +jy]移=[jx]移+ [jy]补=01,101+00,110=10,001 结果 上溢 [jx -jy]移=[jx]移+ [-jy]补=01,101+11,100=01,001 结 果+1
计算机组成原理 第3章 计算机的运算方法
6.4 浮点四则运算
浮点加减运算 浮点乘除法运算
浮点数的表示
机器中任何一个浮点数可写成
x Sx r
jx
Sx为浮点数的尾数,一般为绝对值小于1的规
格化数(补码表示时允许为-1),机器中可用原 码或补码表示。 jx为浮点数的阶码,一般为整数,机器中大多 用补码或移码表示。 r为浮点数的基数,常用2、4、8或16表示。以 下以基数为2进行讨论。
(续) : 即 [x-y]补=11,100;10.110001, 尾数符号位出现“10”, 需右规。 ③规格化 右规后得 [x-y]补=11,101;11.0110001 ④舍入处理 采用0舍1入法,其尾数右规时末位丢1,则 [x-y]补=11,101;11.011001 ⑤溢出判断 经舍入处理后阶符为“11”,不溢出,故最终 结果: x-y= 2-011×(-0.100111)
首先,对每一次运算的结果而言,要保证误差不超过 给定的范围。比如,设机器尾数长39位,要求每次运 算误差不超过末位(即第39位)的“1”,即小于 2-39。 其次在大量的运算过程中要保证误差的平衡,即在每 一次运算时,由于舍入处理,可能使运算结果增大了, 也可能减少了。但总的说来,增加和减少的机会必需 是均等的,否则会产生很大的积累误差。
3. 规格化
尾数S的规格化是指尾数满足条件:
如果采用双符号位的补码,则 当S>0时,其补码规格化形式为 [S]补=00.1××…× 当S<0时,其补码规格化形式为 [S]补=11.0××…× 但对S<0时,有两种情况需特殊处理。
①
②
S=-1/2,则[S]补=11.100…0。对于补码而言,它不满足于上面的 规格化表示式。为了便于硬件判断,特规定-1/2是规格化的数 (对补码而言)。 S=-1,则[S]补=11.000…0。因小数补码允许表示-1,故-1视为规 格化的数。
接上例,求和结果为[x+y]补=00,11;11.1001 尾数的第一数值位与符号位相同,需左规,即将其左 移一位,同时阶码减1,得[x+y]补=00,10;11.0010。
4. 舍入
在对阶和右规的过程中,可能会将尾数的低位丢 失,引起误差,影响精度,为此可用舍入法来提 高尾数的精度。
进行舍入时应满足两个要求
2.
3.
浮点乘除法运算
设两浮点数
x Sx r j y y Sy r