浮点数表示及运算.
浮点数的运算方法

浮点数的运算方法浮点数是计算机中一种表示实数的数据类型,其特点是可以表示带有小数部分的数字。
在进行浮点数的运算时,需要考虑到浮点数的精度问题、舍入误差以及运算顺序等因素。
浮点数的表示方法为:±m×be,其中m为尾数(即小数部分的数值),b为基数或底数,e为指数(表示位移的量)。
1.浮点数加法运算:-对两个浮点数的指数进行比较,将较小指数的浮点数的尾数左移指数之差的位数,使两个浮点数的小数点对齐。
-对齐后的尾数相加,得到一个和。
-对和进行规格化,即将结果的尾数进行处理,使其满足指定的位数限制。
-对规格化后的结果进行舍入运算,得到最终结果。
2.浮点数减法运算:-先将减数的指数调整与被减数的指数相等。
-对齐后的尾数相减,得到一个差。
-对差进行规格化和舍入运算,得到最终结果。
3.浮点数乘法运算:-将两个浮点数的指数相加,得到加法的和,并相应地调整两个浮点数的尾数。
-尾数相乘,得到一个乘积。
-对乘积进行规格化和舍入运算,得到最终结果。
4.浮点数除法运算:-将被除数的指数减去除数的指数,得到差,并相应地调整两个浮点数的尾数。
-尾数相除,得到一个商。
-对商进行规格化和舍入运算,得到最终结果。
在进行浮点数运算时需要注意一些问题:-浮点数的精度问题:由于浮点数的尾数有限位数,所以会存在精度丢失的问题。
这就意味着进行浮点数运算时,可能会出现舍入误差,导致结果有微小的偏差。
-运算顺序:浮点数的运算顺序可能会影响最终结果。
在连续进行多次浮点数运算时,可能会得到不同的结果。
这是因为浮点数的运算不满足交换律和结合律。
因此,在编程中需要谨慎选择运算顺序,以避免结果的不确定性。
-溢出和下溢问题:由于浮点数的范围限制,可能会出现溢出(结果超出浮点数的表示范围)或下溢(结果过小,无法表示)的情况。
针对这些情况,需要进行特殊处理,如返回特定的错误码或进行科学计数法表示。
在实际编程中,可以使用编程语言提供的浮点数运算库或内置函数来进行浮点数运算,以确保运算结果的准确性和可靠性。
浮点数的表示方法

浮点数的表示方法
一、浮点数表示
一个数的浮点形式(设基数是2)可写成:
N = M × 2E
其中:M代表尾数,E代表阶码。
计算机中浮点数只用尾数和阶码表示,其形式如下:
浮点数的精度由尾数决定,数的表示范围由阶码的位数决定。
为了最大限度提高精度,尾数采用规格化形式,既1/2≤M<1。
采用二进制表示时,若尾数大于零,则规格化数应该是01XXXX的形式;若尾数小于零,则规格化数应为10XXXX的形式。
二、机器零
当浮点数的尾数为0或阶码为最小值时,计算机通常把该数当作零,因此程序中进行浮点运算时,判断某数是否为零,通常可以用小于某个极小值来代替。
三、实例
【例1】设X=0.0110×23 ,用补码、浮点数形式表示阶码为X j=011,尾数为00110,这时由于X 尾数不符合01XXXX的形式,因此不是规格化数,必须先进行规格化处理。
方法:若尾数小于1/2,把尾数左移一位(不包括符号位),观察结果是否满足规格化条件,满足则在把阶码减1即可,否则继续左移和调整阶码;若尾数大于1,则把尾数右移一位(不包括符号位),观察结果是否满足规格化条件,满足则在把阶码加1即可,否则继续右移和调整阶码。
上例中,00110左移一位为01100,符合规则化标准,此时阶码减1,为010即得到浮点表示形式。
这个数具体在计算机中如何表示要看计算机中规定的阶码和尾数的位数,若阶码和尾数均为16位,则上面的数X在计算机内部表示就是00000000000000100110000000000000 ,不足
均用零填充。
计算机组成原理:浮点数表示及运算

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 = BBD8H
对阶: [△E]补= [ Ex]补-[Ey]补=00 10+ 11 11= 00 01
y向x对齐,将y的尾数右移一位,阶码加1。 [y]补=00 10,00.0101 求和: 00.1101 + 00.0101 01.0010 [x+y]补=00 10,01.0010 右归:运算结果两符号位不同,其绝对值大于1,右归。 [x+y]补= 00 11,00.1001
0.0000001 --- 0.1111111 1/128 --- 127/128 可表示2-11*0.0001 --- 211*0.1111
设阶码2位,尾数4位
0.0000001 --- 111.1
可表示2-111*0.001 --- 2111*0.111
设阶码3位,尾数3位
0.0000000001 --- 1110000
19
(4) 结果规格化 求和之后得到的数可能不是规格化了的数 , 为了增加有效数 字的位数, 提高运算精度,必须将求和的结果规格化。 ①规格化的定义:
浮点数计算方法

4. 移码表示法
移码通常用于表示浮点数的阶码。由于
阶码是个n位的整数,假定定点整数移码形式
为 x0x1x2…xn时,对定点整数移码的传
统定义是:
[x]移=2n+x
2n>x≥-2n
若阶码数值部分为5位,以x表示真值,
则: [x]移=25+x
25>x≥- 25
小结:上面的数据四种机器表示法中,移码 表示法主要用于表示浮点数的阶码。由于补 码表示对加减法运算十分方便,因此目前机 器中广泛采用补码表示法。在这类机器中, 数用补码表示,补码存储,补码运算。也有 些机器,数用原码进行存储和传送,运算时 改用补码。还有些机器在做加减法时用补码 运算,在做乘除法时用原码运算。
7–3=4
7+9=4
以12取模数(mod12)
-3 = +9
(mod12)
采用补码表示法进行减法运算就比原码方
便得多了。因为不论数是正还是负,机器总是
做加法,减法运算可变为加法运算。关键是我
们需要换算出两个操作数的补码表示。
若定点小数补码形式为x0 .x1x2…xn ,则 补码表示的定义是:
[x] =
3. 反码表示法
所谓反码,就是二进制的各位数码0变为1, 1变为0。也就是说,若Xi=1,则反码为xi=0; 若xi=0,则反码xi=1。数值上面的一横表示反 码的意思。在计算机中用触发器寄存数码,若 触发器Q端输出表示原码,则其Q端输出就是 反码。由此可知,反码是容易得到的。
若定点小数反码形式为x0 .x1x2…xn ,则 反码表示的定义是:
20.59375=10100.10011
然后移动小数点,使其在第1,2位之间
10100.10011=1.010010011×24
第二章 浮点数的表达与运算

浮点数的表示与运算一、选择1、在规格化浮点数运算中,若浮点数为25×1.10101,其中尾数为补码表示,则该数需将尾数左移一位规格化2、浮点数格式如下:1位阶符,6位阶码,1位数符,8位尾数。
若阶码用移码,尾数用补码表示,则浮点数所能表示数的范围是-263 ~(1-2-8)×2633、某浮点机,采用规格化浮点数表示,阶码用移码表示(最高位代表符号位),尾数用原码表示。
下列哪个数的表示不是规格化浮点数?(B )阶码尾数A.11111111,1.1000 (00)B.0011111,1.0111 (01)C.1000001,0.1111 (01)D.0111111,0.1000 (10)4、设浮点数阶的基数为8,尾数用模4补码表示。
试指出下列浮点数中哪个是规格化数?(C )A.11.111000B.00.000111C.11.101010D.11.1111015、按照IEEE654标准规定的32位浮点数(41A4C000)16对应的十进制数是( D )A.4.59375B.-20.59375C.-4.59375D.20.593756、如果某单精度浮点数、某原码、某补码、某移码的32位机器数为0xF0000000。
这些数从大到小的顺序是移>补>原>浮7、假定采用IEEE754标准中的单精度浮点数格式表示一个数为45100000H,则该数的值是(+1.125)10×2118、设浮点数共12位。
其中阶码含1位阶符共4位,以2为底,补码表示:尾数含1位数符共8位,补码表示,规格化。
则该浮点数所能表示的最大正数是27-19、如果浮点数的尾数用补码表示,则下列(D )中的尾数是规格化数形式。
A. 1.11000B. 0.01110C. 0.01010D.1.0001010、设浮点数的基数为4,尾数用原码表示,则以下(C )是规格化的数。
A. 1.001101B.0.001101C.1.011011D.0.00001011、已知X=00.875×21,Y=0.625×22,设浮点数格式为阶符1位,阶码2位,数符1位,尾数3位,通过补码求出Z=X-Y 的二进制浮点数规格化结果是0111 01112、IEEE754标准中的舍入模式可以用于二进制数也可以用于十进制数,在采用舍入到最接近且可表示的值时,若要舍入两个有效数字形式,(12.5)D应该舍入为1213、下列关于舍入的说法,正确的是(E )A.不仅仅只有浮点数需要舍入,定点数在运算时也可能要舍入B. 在浮点数舍入中,只有左规格化时可能要舍入C. 在浮点数舍入中,只有右规格化时可能要舍入二、综合应用题1、什么是浮点数的溢出?什么情况下发生上溢出?什么情况下发生下溢出?2、现有一计算机字长32位(D31~D0),数符位是第31位。
第2章2.3浮点运算和浮点运算器

• 阶码用移码表示
• 移码的特点:真值越大,移码的数值也越大,无论正负 • 可以用比较电路直接比较两个阶码的大小
4
2.3 .3 浮点运算流水线
1 流水线原理
• 线性流水线 • 各子任务之间具有这种线性优先关系的流水线 • 线性流水线的硬件基本结构(流水线CAI演示) • 处理一个子任务的过程为过程段(Si) • 线性流水线由一系列串联的过程段组成 • 各个过程段之间设有高速缓冲寄存器(L),以暂 时保存上一过程子任务处理的结果 • 在一个统一的时钟(C)的控制下,数据从一个过 程段流向下一个相邻的过程段
• 当指令控制器工作时,运算器基本上处于空闲状态,而当 运算器工作时指令控制器又处于空闲状态,资源浪费浪费 • 完成第一条指令前三步后,指令控制器不等运算器完成 该指令后两步,立即开始第二条指令,运算器也如此; 16 • 形成一种与工厂中的装配流水线类似的流水线
2.3 .3 浮点运算流水线
1 流水线原理
【例2-18】 设x=2010×0.11011011,y=2100×(-0.10101100), 求x+y。 【解】 为了便于直观理解,假设两数均以补码表示,阶码采用双符 号位,尾数采用单符号位,则它们的浮点表示分别为 [x]浮=00 010 0.11011011 [y]浮=00 100 1.01010100 ①求阶差并对阶 △E=Ex-Ey=[Ex]补+[-Ey]补=00 010+11 100=(11 110)补= (11 010)原=(-2)10 简单起见,010是2D, 100是4D,所以 △E=-2D x的阶码小,应使Mx右移2位,Ex加2 ∴[x]浮=00 100 0.00110110(11) 其中(11)表示Mx右移2位后移出的最低两位数。
浮点数表示及运算

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
浮点数的表示和基本运算

浮点数的表示和基本运算1 浮点数的表示通常,我们可以用下面的格式来表示浮点数S P M其中S是符号位,P是阶码,M是尾数对于IBM-PC而言,单精度浮点数是32位(即4字节)的,双精度浮点数是64位(即8字节)的。
两者的S,P,M所占的位数以及表示方法由下表可知S P M 表示公式偏移量1 8 23 (-1)S*2(P-127)*1.M 1271 11 52 (-1)S*2(P-1023)*1.M 1023以单精度浮点数为例,可以得到其二进制的表示格式如下S(第31位) P(30位到23位) M(22位到0位)其中S是符号位,只有0和1,分别表示正负;P是阶码,通常使用移码表示(移码和补码只有符号位相反,其余都一样。
对于正数而言,原码,反码和补码都一样;对于负数而言,补码就是其绝对值的原码全部取反,然后加1.)为了简单起见,本文都只讨论单精度浮点数,双精度浮点数也是用一样的方式存储和表示的。
2 浮点数的表示约定单精度浮点数和双精度浮点数都是用IEEE754标准定义的,其中有一些特殊约定。
(1)当P = 0, M = 0时,表示0。
(2)当P = 255, M = 0时,表示无穷大,用符号位来确定是正无穷大还是负无穷大。
(3)当P = 255, M != 0时,表示NaN(Not a Number,不是一个数)。
当我们使用.Net Framework的时候,我们通常会用到下面三个常量Console.WriteLine(float.MaxValue); // 3.402823E+38Console.WriteLine(float.MinValue); //-3.402823E+38Console.WriteLine(float.Epsilon); // 1.401298E-45//如果我们把它们转换成双精度类型,它们的值如下Console.WriteLine(Convert.ToDouble(float.MaxValue)); // 3.40282346638529E+38Console.WriteLine(Convert.ToDouble(float.MinValue)); //-3.40282346638529E+38Console.WriteLine(Convert.ToDouble(float.Epsilon)); // 1.40129846432482E-45那么这些值是如何求出来的呢?根据上面的约定,我们可以知道阶码P的最大值是11111110(这个值是254,因为255用于特殊的约定,那么对于可以精确表示的数来说,254就是最大的阶码了)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机组成原理
7
三 、浮点数的标准格式IEEE754
为便于软件移植,使用 IEEE(电气和电子工程师协会)标准IEEE754 标 准:尾数用原码;阶码用“移码”;基为2。
31 30
23 22
0
32位
64位 S
S
63 62
E
E
M
52 51 0
M
S——尾数符号,0正1负; M——尾数, 纯小数表示, 小数点放在尾数域的最前面。采用原码表示。 E——阶码,采用“移码”表示(移码可表示阶符); 阶符采用隐含方式,即采用移码方法来表示正负指数。
0.1000101010
把不满足这一表示要求的尾数,变成满足这一要求的尾数 的操作过程,叫作浮点数的规格化处理,通过尾数移位和修改 阶码实现。
计算机组成原理 5
规格化目的: 为了提高数据的表示精度 为了数据表示的唯一性 尾数为R进制的规格化: 绝对值大于或等于1/R 二进制原码的规格化数的表现形式:
0100 0001 1010 0100 1100 0000 0000 0000= (41A4C000)16
计算机组成原理
11
例:将十进制数-0.75表示成单精度的IEEE 754标准代码。
解:-0.75 = -3/4 = -0.112 = -1.1×2-1
计算机组成原理
8
规格化浮点数的真值
31 30
32位浮点数格式:
23 22
0
S
E
M
一个规格化的32位浮点数x的真值为: x = (-1)s (1.M) 2E-127 e =E – 127 一个规格化的64位浮点数x的真值为: 这里e是真值,E是机器数 x = ( –1)s×(1.M)×2E-1023
计算机组成原理
浮点数表示及运算
2018年8月8日
计算机组成原理 1
一、浮点数的表示
9×10-28 = 0.9 ×10-27 2×1033 = 0.2 ×1034
任意一个十进制数 N 可以写成 N=10E·×M (十进制表示) 计算机中一个任意进制数 N 可以写成 N=Re×m = 2E×M = 2±e× (±m)
设阶码3位,尾数3位
0.0000000001 --- 1110000
4
计算机组成原理
二、浮点数规格化 浮点数是数学中实数的子集合,由一个纯小数乘上一个指数 值来组成。
一个浮点数有不同的表示:
0.5; 0.05101 ; 0.005 102 ; 50 10-2 为提高数据的表示精度,需做规格化处理。 在计算机内,其纯小数部分被称为浮点数的尾数,对非 0 值的浮点数,要求尾数的绝对值必须 >= 1/2,即尾数域的最高 有效位应为1,称满足这种表示要求的浮点数为规格化表示:
m :尾数,是一个纯小数。 e :浮点的指数, 是一个整数。 R :基数,对于二进计数值的机器是一个常数,一般规定R 为2,8或16
E0
E1
E2
… …
…
Em
M0
M1
M2
… …
…
Mn
阶符
计算机组成原理
阶值
尾符
尾数值
2
一个机器浮点数由阶码和尾数及其符号位组成: 尾数:用定点小数表示,给出有效数字的位数,决定了浮点数的表示精度 阶码:用定点整数形式表示,指明小数点在数据中的位置,决定了浮点数
的表示范围。
浮点数的表示范围
负上溢
负下溢
正下溢 正上溢
-
最 小 负 数
负数
最 大 负 数
0
N=2E×M |N|→∞ 产生正上溢或者负上溢 |N|→0 产生正下溢或者负下溢Biblioteka 最 小 正 数正数
最 大 正 数
+
计算机组成原理
3
机器字长一定时,阶码越长,表示范围越大,精度越低 浮点数表示范围比定点数大,精度高
计算机组成原理
10
例: 将十进制数20.59375转换成32位浮点数的二进制格式来存储。
解:首先分别将整数和分数部分转换成二进制数: 20.59375=10100.10011 然后移动小数点,使其在第1,2位之间 10100.10011=1.010010011×24 e=4 于是得到: e =E – 127 S=0,E=4+127=131=1000,0011,M=010010011 最后得到32位浮点数的二进制存储格式为
正数 0.1xxxxxx 负数 1.1xxxxxx 补码尾数的规格化的表现形式:尾数的最高位与符号位相反。 正数 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 = BBD8H
8位定点小数可表示的范围
0.0000001 --- 0.1111111 1/128 --- 127/128 可表示2-11*0.0001 --- 211*0.1111
设阶码2位,尾数4位
0.0000001 --- 111.1
可表示2-111*0.001 --- 2111*0.111
1.隐藏位技术
原码非0值浮点数的尾数数值最高位必定为 1,则在保存浮点数到内存前,
通过尾数左移, 强行把该位去掉, 用同样多的位数能多存一位二进制数, 有利于提高数据表示精度,称这种处理方案使用了隐藏位技术。 当然,在取回这样的浮点数到运算器执行运算时,必须先恢复该隐藏位。
2.阶码用“移码”偏移值127而不是128
Emin=1, Emax=254/2046
计算机组成原理
9
例:若浮点数 x 的二进制存储格式为(41360000)16,求其32位 浮点数的十进制值。
解: 0100,0001,0011,0110,0000,0000,0000,0000 数符:0 阶码:1000,0010 尾数:011,0110,0000,0000,0000,0000 指数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