Lecture 3 运算器-浮点数的表示
浮点数的表示方法
浮点数的表示方法
一、浮点数表示
一个数的浮点形式(设基数是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 ,不足
均用零填充。
浮点数表示方法
数据类型
--实数型
下面分析一下浮点数在计算机中存储的原理。
对于浮点数100.00来说,在计算机中存储的数0x42C80000。 对应的二进制数表示为:
其中:
0:表示符号位,表示当前是正数;
100,0010,1:表示阶数,对应的十进制数为133。在浮点标准中,
这个值已经加上了偏移量127,所以实际的阶数为133-127=6,对应
注:在使用十进制表示浮点数时,必须包含小数点。
指数形式表示法
由十进制数字、阶码标志(小写字母“e”或大写字母“E”),以及 阶码(只能为整数,可以带符号)组成。一般形式为: aEn
其中: a和n均为十进制数;其表示的指数为: a×10n
数据类型
--实数型
在标准的C语言中,将按照所能表示的数的动态范围和精度,将 实数进一步的分成单精度实数、双精度实数和长双精度三种,分 别用float、double和long double关键字声明这三种类型的实数。 它们所分配的存储字长和表示数的范围不同。
15~16
10-307~10308
long double
128(16)
18~19 10-4931~104932
数据类型
--实数型
【例】浮点数声明的例子
void main() {
float i=100.00,j=245.6e30; } 下面对该例子进行分析,分析步骤主要包括: 1)进入本书所提供资料的STC_example\例子8-2\目录下,在Keil μVision5 集成开发环境下打开该设计。 2)在集成开发环境主界面主菜单下,选择Debug->Start/Stop Debug Session。 3)在调试器模式下,单步运行该程序,一直到程序的末尾。
Lecture 3 浮点数的表示
相当于此时移码 的计算不是加 128,而是加 127
IEEE754标准浮点数表示
几个特殊数值:
当E的二进制位全为1时为特殊数值:此时,
若M的二进制位全为0,则n表示无穷大。若S为1则为负 无穷大,若S为0则为正无穷大; 若M的二进制位不全为0时,表示NaN(Not a Number), 表示这不是一个合法实数。
浮点数在计算机中的表示格式如下:
MS E 数符 阶码 定点整数移码表示
或
M 尾数值 定点小数补码表示
ES E MS M 阶符 阶码 数符 尾数值 定点整数补码表示 定点小数补码表示
浮点数的表示格式
E 阶码 Es Ek-1 … E1E0 Ms Mn-1
阶 符 阶码的 数值部分 数 符 小数点位置
M 尾数
IEEE754标准浮点数表示
例 将十进制数9和5/32转换为IEEE754标准的单精度数, 并用8位十六进 制表示
解答(1)
9= (-1)0×1001=(-1)0×23 ×1.001 =(-1)0×2130-127 ×1.001
二进制代码为:
0 10000010
00100000000000000000000
即:41100000H
解答(2)
5/32= (-1)0×0101×2-5
=(-1)0×2-5×22×1.01
=(-1)0×2124-127 ×1.01
二进制代码为: 0 01111100 01000000000000000000000 即:3E200000H
IEEE754标准浮点数表示
例
将IEEE754单精度数(8位十六进制表示)转换为十进制数
浮点数的表示和运算(范围计算)
浮点数的表示和运算浮点数的表示和基本运算1 浮点数的表示通常,我们可以用下面的格式来表示浮点数其中S是符号位,P是阶码,M是尾数对于IBM-PC而言,单精度浮点数是32位(即4字节)的,双精度浮点数是64位(即8字节)的。
两者的S,P,M所占的位数以及表示方法由下表可知以单精度浮点数为例,可以得到其二进制的表示格式如下其中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就是最大的阶码了)。
浮点数表示方式总结
浮点数表示方式总结王春桃定点数的表示范围有限,为此需要采用浮点数表示。
所谓浮点表示,即先将某一待表示数值写成二进制指数形式,然后在表示时只记录数的指数及尾数部分,这样能在有限的二进制位数情况下表示很大范围内的数值。
如对于十进制数值(20.59375)10,写成二进制指数形式为0.1010010011×24,在表示是只记录尾数0.1010010011和指数100即可。
总体而言,浮点数的表示形式主要有一般格式和IEEE754格式这两种。
其中,一般格式指满足一般的二进制数机器码(包括定点整数和定点小数)的规定规则;而IEEE754格式则在一般格式上进一步做了一些约定,以便表示数时比较方便和高效。
下面以32位的浮点数表示作为例子来说明。
1.浮点表示的一般格式根据浮点表示的目的可知,浮点数需要在有限长的二进制位数(如32位)内表示尾数和指数。
也就是说,在有限位数内需要包含尾数和指数两部分信息,进一步考虑到这两部分都有正负之分,因此浮点表示的一般格式可以设计为:图1 浮点表示的一般格式其中阶码就是指数,阶符就是指数的符号;数符是指尾数的符号。
至于它们之间各占多少位,取决于表示范围、表示精度等方面的权衡。
如对于32位长的浮点数,阶符和数符各用1位,阶码可以用7位,尾数23位;阶符和阶码也可以结合起来,用一个8位来表达。
图1中,将数符放在中间部分,这与定点表示格式不一致,而且在计算机处理时也不够方便,因此实际中一般采用图2所示的浮点表示格式。
数符阶码尾数图2 实际使用中的浮点表示一般格式其中,阶符已经包含在阶码中了。
例如,对于32位长的浮点数,数符用1位,0表示正数,1表示负数;阶码用8位,通常用移码表示以方便用硬件实现指数运算,因这时表示范围为正数范围0~255,减去偏移量128得到实际的指数范围为-128~127;尾数为23位,用原码或补码纯小数表示均可。
为了使得浮点数表示的范围尽可能大及表示的效率尽可能高,尾数需要进行规格化。
浮点数在计算机中是如何表示的
浮点数在计算机中是如何表⽰的前⾔相⽐int等整型,float等浮点类型的表⽰和存储较为复杂,但它⼜是⼀个⽆法回避的话题,那么就有必要对浮点⼀探究竟了。
在计算机中,⼀般⽤IEEE浮点近似表⽰任意⼀个实数,那么它实际上⼜是如何表⽰的呢?下⾯的表达式⾥,i的值是多少,为什么?如果你不确定答案,那么你应该好好看看本⽂。
float f = 8.25f;int i = *(int*)&f;IEEE浮点表⽰IEEE浮点标准⽤的形式近似表⽰⼀个数。
并且将浮点数的位表⽰划分为三个字段:符号(sign)s决定这个数是负数(s=1)还是正数(s=0)。
可以⽤⼀个单独的符号s直接编码符号s。
尾数(signficand)M是⼀个⼆进制⼩数,它的范围是1~2-ξ或者是0~1-ξ。
n位⼩数字段编码尾数M。
阶码(exponent)E的作⽤是对浮点数加权,这个权重是2的E次幂(可能是负数)。
k位的阶码字段编码阶码E。
在单精度浮点格式(c语⾔的float)中,s,exp和frac字段分别为1位,8位和23位,⽽双精度浮点格式(c语⾔中的double)中,s,exp和frac 字段分别为1位,11位和52位。
⼀个浮点数的常见⽐特位表⽰如下:单精度双精度⽽根据exp的值,被编码的值可以分为三⼤类不同的情况。
下⾯进⾏⼀⼀解释。
情况1:规格化的值即最普遍的情况,当exp,即阶码域既不为全0,也不为全1的情况。
在这种情况下,阶码字段解释为以偏置(biased)形式表⽰有符号整数,即E=exp-Bias,exp是⽆符号数(1~254)。
Bias是⼀个等于的偏置值,对于单精度来说,k=23,Bias=127,因此E的范围是-126~+127。
frac被描述为⼩数值,且0≤frac<1,其⼆进制表⽰为0.frac。
尾数定义为 M=1+frac ,则M=1.frac。
那么就有1≤M<2,由于总是能够调整阶码E,使得M在范围1≤M<2,所以不需要显⽰的表⽰它,这样还能获得⼀个额外的精度位。
计算机组成原理:浮点数表示及运算(方案).ppt
浮点数表示及运算
计算机组成原理
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)
m :尾数,是一个纯小数。 e :浮点的指数, 是一个整数。
浮点数的表示范围 负下溢 正下溢
负上溢
正上溢
-
最
负数 最
0
正数
最
最
+
小
大
小
大
负
负
正
正
数
数
数
数
N=2E×M
|N|→∞ 产生正上溢或者负上溢
|N|→0 产生正下溢或者负下溢
计算机组成原理
3
机器字长一定时,阶码越长,表示范围越大,精度越低 浮点数表示范围比定点数大,精度高
8位定点小数可表示的范围
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
= BBD8H
计算机组成原理
7
三 、浮点数的标准格式IEEE754
为便于软件移植,使用 IEEE(电气和电子工程师协会)标准IEEE754 标 准:尾数用原码;阶码用“移码”;基为2。
计算机浮点数表示
计算机浮点数表示
计算机中的浮点数表示基于IEEE 754标准。
该标准定义了两
种浮点数表示格式:单精度和双精度。
在单精度表示中,一个浮点数占32位,分为三个部分:符号位、指数位和尾数位。
具体格式如下:
1位符号位 | 8位指数位 | 23位尾数位
其中,符号位用来表示数的正负,0表示正数,1表示负数。
指数位用来表示浮点数的指数部分,尾数位用来表示浮点数的有效位数部分。
指数位和尾数位都采用二进制表示。
在双精度表示中,一个浮点数占64位,分为三个部分:符号位、指数位和尾数位。
具体格式如下:
1位符号位 | 11位指数位 | 52位尾数位
双精度表示相较于单精度表示,指数位和尾数位的位数更多,因此具有更高的精度和范围。
浮点数的实数值通过以下公式计算得到:
值 = (-1)^符号位 × (1 + 尾数位) × 2^(指数位 - 偏移值)
其中,符号位决定了浮点数的正负,尾数位决定了浮点数的有效位数,指数位决定了浮点数的幂的大小。
偏移值是一个常数,
用来对指数进行偏移,以保持浮点数的标准化表示。
偏移值在单精度和双精度中分别为127和1023。
通过以上表示和计算方式,计算机可以对浮点数进行存储和运算。
然而,由于浮点数的表示是有限的,因此在进行浮点数运算时可能会出现舍入误差。
浮点数表示方法总结
计算机中数据的表示之关于浮点数1.关于浮点数的问题 浮点数的一般格式:格式(1) 格式(2)注意:(1)一般浮点数尾数采用纯小数(隐含位为0)来表示,即尾数M 与定点小数表示方法相同,由于尾数的符号位决定整个浮点数的符号,故有时采用格式(2)的形式;(2)当尾数真值为0(不论阶码何值),或阶码的值比能在机器中表示的最小值还小,计算机把该浮点数看成零值,称为机器零,即浮点数表示不了真值绝对值很接近0的数,只能看成0处理; (3)尾数通常用原码或补码表示,阶码一般用移码或补码表示,如无特别说明,采用课本44页移码表示方法。
浮点数表示范围:⨯最大阶码最大正数=最大正尾数2 ⨯最小阶码最小正数=最小正尾数2 ⨯最小阶码最大负数=最大负尾数2 ⨯最大阶码最小负数=最小负尾数2那么给定一浮点数的表示形式,包括符号、阶码、尾数各占位数及其采用哪种机器码表示,如求其能表示最大负数,转化为求这种表示形式的能表示的最大负尾数,最小阶码。
浮点数规格化表示:为了提高数据的表示精度,当浮点数尾数的真值不为 0 时,满足条件112≤≤尾数真值,称为一般浮点数的规格化表示。
如没特别说明,指的是一般的非规格化浮点数。
注意规格化浮点数与一般浮点数一样,隐含位也是0,仅仅对尾数真值加上这一约束条件而已。
对于不同码制,特征如下: (1)尾数原码表示: (采用形式(1),按照尾数数值位为n 位)①尾数>0时,其尾数部分形式尾数符号1位尾数数值n 位01XXXXXXXXXXXXXXXXXX称为规格化最大:尾数部分0111…11,真值为12n--;最小:尾数部分0100…00,真值为12;②尾数<0时,其尾数部分形式尾数符号1位尾数数值n 位11XXXXXXXXXXXXXXXXXX称为规格化最大:尾数部分1100…00,真值为12-; 最小:尾数部分1111…11,真值为(12)n---;(2)尾数补码表示: (采用形式(1),按照尾数数值位为n 位)阶码符号尾数符号数值阶码符号尾数符号0①尾数>0时,其尾数部分形式尾数符号1位尾数数值n位01XXXXXXXXXXXXXXXXXX称为规格化最大:尾数部分0111…11,真值为12n--;最小:尾数部分0100…00,真值为12;②尾数<0时,其尾数部分形式尾数符号1位尾数数值n位10XXXXXXXXXXXXXXXXXX称为规格化(注意:某些书上对此含糊其辞,参考清华(郑纬民:计算机系统结构)与上交大的书,以此为准!)最大:尾数部分1011…11,真值为1(2) 2n--+;最小:尾数部分1000…00,真值为-1;关于IEEE745浮点数:表示形式数值1位(1)IEEE754浮点数短浮点数和长浮点数尾数隐含位为1,临时浮点数没有隐含位,注意阶码的偏置值与一般浮点数不同,对于单精度和双精度数(1) 1.2sm Em-=-⨯⨯偏置值表示真值;短浮点数和长浮点数尾数采用隐含位为1称之为规格化的IEEE短浮点数与长浮点数(注意区别一般的规格化浮点数)。
计算机组成原理:浮点数表示及运算
0.1000101010
把不满足这一表示要求的尾数,变成满足这一要求的尾数 的操作过程,叫作浮点数的规格化处理,通过尾数移位和修改 阶码实现。
计算机组成原理 5
规格化目的: 为了提高数据的表示精度 为了数据表示的唯一性 尾数为R进制的规格化: 绝对值大于或等于1/R 二进制原码的规格化数的表现形式:
…
Em
M0
M1
M2
… …
…
Mn
阶符
计算机组成原理
阶值
尾符
尾数值
2
一个机器浮点数由阶码和尾数及其符号位组成: 尾数:用定点小数表示,给出有效数字的位数,决定了浮点数的表示精度 阶码:用定点整数形式表示,指明小数点在数据中的位置,决定了浮点数
的表示范围。
浮点数的表示范围
负上溢
负下溢
正下溢 正上溢
-
最 小 负 数
• 对阶原则 阶码小的数向阶码大的数对齐; 对阶过程小阶的尾数右移,每右移一位,其阶码加1(右规)。
210*(0.11000)+28*(0.00110) 大阶对小阶 210*(0.11000)--28*(11.000) 11.000+0.00110 ?????????
小阶对大阶 28*(0.00110)--210*(0.00001)
计算机组成原理
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
计算机组成原理第4章浮点数运算方法ppt课件
jy]移 (mod 2n+1) 则直接可得移码形式。
同理,当作除法运算时,商的阶码可用下式完成: [jx]移+[-jy]补 = [jx - jy]移
11
5. 溢出判断
在浮点规格化中已指出,当尾数之和(差)出现 01.××…×或10.××…×时,并不表示溢出,只有 将此数右规后,再根据阶码来判断浮点运算结果是否 溢出。
若机器数为补码,尾数为规格化形式,并假设阶符取 2位,阶码取7位,数符取2位,尾数取n位,则它们能 表示的补码在数轴上的表示范围如下图。
浮 点 数 加 减 运 算 流 程 图
16
浮点加减法运算
1. 大型计算机和高档微型机中,浮点加减法运算是由 硬件完成的。低档的微型机浮点加减法运算是由软 件完成的,但无论用硬件实现或由软件实现加减法 运算,基本原理是一致的。
2. 浮点加减法运算要经过对阶、尾数求和、规格化、 舍入和溢出判断五步操作。其中尾数运算与定点加
23
2. 尾数运算
(1)浮点乘法尾数运算 (2)浮点除法尾数运算
24
(1)浮点乘法尾数运算
预处理:检测两个尾数中是否有一个为0, 若有一个为0,乘积必为0,不再作其他操 作;如果两尾数均不为0,则可进行乘法运 算。
相乘:两个浮点数的尾数相乘可以采用定 点小数的任何一种乘法运算来完成。
规格化:相乘结果可能要进行左规,左规 时调整阶码后如果发生阶下溢,则作机器 零处理;如果发生阶上溢,则作溢出处理。
浮点数表示方式
浮点数表示方式
浮点数表示方式有多种,以下是几种常见的表示方式:
1、规格化表示法:将浮点数表示为一个定点数的指数形式,
即 N = M * r^E,其中 M 是尾数(或有效数字),E 是指数,r 是基数。
在计算机中,通常使用定点数表示法,即将浮点数表示为一个整数,它的小数点位置是固定的。
2、非规格化表示法:将浮点数表示为一个非定点数的指数形式,即 N = M * r^E,其中 M 和 E 的含义与规格化表示法相同,但是 M 不是一个定点数,而是任意一个实数。
3、混合表示法:将浮点数表示为一个定点数的指数形式,但
是同时保留一个非定点数的尾数,即 N = M * r^E,其中 M 的
含义与规格化表示法相同,但是 E 不是一个定点数,而是任
意一个实数。
4、符号整数表示法:将浮点数表示为一个符号整数,即 N =
S * 2^E,其中 S 是符号位,E 是指数。
这种表示方式通常用
于表示整数类型的浮点数。
总之,浮点数的表示方式有很多种,不同的表示方式适用于不同的应用场景。
在计算机中,通常使用规格化表示法或混合表示法来处理浮点数。
浮点数在计算机中的表示法
浮点数在计算机中的表示法浮点数在计算机中的表示法是一种用于表示带有小数点的数字的方法。
浮点数表示法通常用于表示实数,如3.14159。
在计算机中,浮点数通常用二进制表示。
下面将详细介绍浮点数在计算机中的表示法。
一、二进制小数计算机内部存储和处理的所有数据最终都被转换为二进制形式。
浮点数是一种特殊的数据类型,用于表示带有小数部分的数字。
浮点数由三个部分组成:符号位、指数位和尾数位。
1.符号位:符号位用于表示数字的符号。
它可以是0或1。
0表示正数,1表示负数。
2.指数位:指数位用于表示数字的小数点位置。
它是一个偏移量,从某个标准值开始计算。
标准值取决于所使用的浮点数表示法。
3.尾数位:尾数位用于表示数字的小数部分。
它是二进制形式的小数,通常采用定点表示法。
二、浮点数表示法计算机中常用的浮点数表示法有单精度浮点数(float)和双精度浮点数(double)。
1.单精度浮点数(float):它使用32位(4字节)来表示一个浮点数。
其中,符号位占1位,指数位占8位,尾数位占23位。
单精度浮点数可以提供大约6位十进制精度的数值表示。
2.双精度浮点数(double):它使用64位(8字节)来表示一个浮点数。
其中,符号位占1位,指数位占11位,尾数位占52位。
双精度浮点数可以提供大约15位十进制精度的数值表示。
三、浮点数的存储和表示在计算机中存储和表示浮点数时,首先将浮点数的符号位存储在计算机的内存中。
然后,使用指数位来确定小数点的位置,并将尾数位存储在内存中。
指数位和尾数位的存储方式取决于所使用的浮点数表示法。
四、浮点数的运算浮点数的运算包括加法、减法、乘法和除法等。
在进行浮点数运算时,需要遵循以下步骤:1.对齐:首先对齐两个浮点数的指数位和小数位,以确保它们具有相同的精度。
2.符号运算:根据符号位的值进行相应的运算(加法、减法等)。
3.指数运算:根据指数位的值进行相应的运算(乘法、除法等)。
4.尾数运算:根据尾数位的值进行相应的运算(乘法、除法等)。
浮点数表示方法与运算
浮点数表示方法与运算在计算机系统的发展过程中,曾经提出过多种方法表达实数,典型的比如定点数。
在定点数表达方式中,小数点位置固定,而计算机字长有限,所以定点数无法表达很大和很小的实数。
最终,计算机科学发展出了表达范围更大的表达方式——浮点数,浮点数也是对实数的一种近似表达。
1.浮点数表达方式我们知道任何一个R 进制数N 均可用下面的形式表示:N R =±S ×R ±e其中,S—尾数,代表N 的有效数字;R—基值,通常取2、8、16;e—阶码,代表N 的小数点的实际位置(相当于数学中的指数)。
比如一个十进制数的浮点表达1.2345×102,其中1.2345为尾数,10为基数,2为阶码。
一个二进制数的浮点表达0.001001×25,0.001001为尾数,2为基数,5为阶码;同时0.001001×25也可以表示成0.100100×23,0.100100为尾数,2为基数,3为阶码。
浮点数就是利用阶码e 的变化达到浮动小数点的效果,从而灵活地表达更大范围的实数。
2.浮点数的规格化一个数用浮点表示时,存在两个问题:一是如何尽可能多得保留有效数字;二是如何保证浮点表示的唯一。
对于数0.001001×25,可以表示成0.100100×23、0.00001001×27等等,所以对于同一个数,浮点有多种表示(也就是不能唯一表示)。
另外,如果规定尾数的位数为6位,则0.00001001×27会丢掉有效数字,变成0.000010×27。
因此在计算机中,浮点数通常采用规格化表示方法。
当浮点数的基数R 为2,即采用二进制数时,规格化尾数的定义为:1/2<=|S|<1。
若尾数采用原码(1位符号位+n 位数值)表示,[S]原=S f S 1S 2S 3…S n (S f 为符号位的数符),则满足S 1=1的数称为规格化数。
计算机中浮点数的表示形式
计算机中浮点数的表⽰形式IEEE 浮点表⽰IEEE 浮点标准:V = (-1)s * M * 2E表⽰⼀个浮点数:符号(sign) s 决定V的正(s=0)或负(s=1),对于 0 后⾯会有说明尾数(Mantissa) ⼆进制⼩数阶码(Exponent) E 的作⽤是对浮点数加权,这个权重是 2 的 E 次幂将浮点数的位分为 3 个部分:1 位的符号位 s 表⽰ sk 位的阶码字段 exp = e k-1...e1e0表⽰ En 位的⼩数字段 frac = f n-1...f1f0表⽰ M以 C 语⾔为例,不同的精度下,s、exp、frac 有不同的位数:单精度:31 30 23 22 0+---+---------+-----------------------------------------+| s | exp | frac |+---+---------+-----------------------------------------+双精度:63 62 52 51 32+---+----------------+----------------------------------+| s | exp | frac(51:32) |+---+----------------+----------------------------------+31 0+-------------------------------------------------------+| frac(31:0) |+-------------------------------------------------------+float:s 1位、exp 的 k=8位、frac=23位,合计 32位double:s 1位、exp 的 k=11位、frac=52位,合计 64位分类以 C 语⾔单精度为例,根据 exp 存储的位的不同,所表⽰的浮点数可以分成 3 中不同的情况,⽽最后⼀种情况中情况分两个变种:1. 规格化+-------------------------------------------------------+| s | exp!=0 & exp!=255 | frac |+-------------------------------------------------------+这是最常见的情况,exp 的位模式既不为全 0,也不为全 1规格化的值有两点需要特别注意:1. 阶码 E 包含⼀定的偏置 Bias,也就是说E = exp - Bias,exp 是⽆符号数,Bias = 2k-1 - 1,偏置的作⽤是为了在规格化取值范围与⾮规格化取值范围之间平滑过渡2. 尾数 M 的值并不是 frac 所表⽰的⼩数值,实际情况是M = 1 + frac通常情况下,⼆进制整数部分通过调整⼩数点(也就是修改 E)来变成 1,所以 IEEE 的表⽰法直接将这⼀位的1省去,这样⼆进制⼩数部分就能多存储⼀位,提⾼了精度,也就是说这个 frac 隐含了开头的 1举个例⼦:假设 frac 有 5 位,现在要存储⼀个⼆进制数 b,b 的值是 0.101011(2),调整⼀下权重:1.01011 * 2-1(2),farc 存储的就是⼩数点后⾯的这 5 位010112. ⾮规格化+-------------------------------------------------------+| s | exp=0 | frac |+-------------------------------------------------------+exp 位模式全为 0,E = exp - Bias,M = frac规格化数因 frac 隐含开头的 1,M >= 1,故⽽⽆法表⽰ 0 这个数。
浮点数运算与加法器.ppt
3.4 加法器和ALU
C4=G4+P4C3 C5=G5+P5C4= G5+ P5G4+ P5P4C3 C6=G6+P6C5= G6+ P6G5+ P6P5G4+ P6 P5P4C3 C7=G7+P7C6= G7+ P7G6+ P7P6G5+ P7P6 P5 G4+ P7P6 P5P4C3 C8=G8+P8C7 C9=G9+P9C8= G9+ P9G8+ P9P8C7 C10=G10+P10C9= G10+ P10G9+ P10P9G8+ P10 P9P8C7 C11=G11+P11C10= G11+ P11G10+ P11P10G9+ P11P10 P9 G8+ P11P10 P9P8C7
4.舍入
右规或对阶时尾数低位上的数值会移掉,使数值精度受影响, 常用“0”舍“1”入法。当移掉的最高位为1时,在尾数的末位加 1,如果加1后又使尾数溢出,则要进行右规。
5.检查阶码是否溢出
阶码下溢,则置结果为机器零。若上溢,则置溢出标志 。
规格化浮点数加减运算流程
例题: 两浮点数相加,求X+Y。 已知:X=2010 · 0.11011011, y=2100 · (-0.10101100) 计算过程: 解:X和Y在机器中的浮点补码表示形式为(双符号位): 阶符 阶码 数符 尾数 X: 0 0 0 1 0 0 0 1 1 0 1 1 0 1 1 Y: 0 0 1 0 0 1 1 0 1 0 1 0 1 0 0 (1)对阶操作 阶差ΔE=[Ex]补+[-EY]补=00010+11100=11110 X阶码小,Mx右移2位,保留阶码E=00100。 [Mx]补=00 00 110 110 11 下划线上的数是右移出去而保留的附加位。
计算机组成原理浮点数表示及运算
=+(1.011011)×23=+1011.011=(11.375)10
R :基数,对于二进计数值的机器是一个常数,一般规定R 为2,8或16
E0 E1 E2 … … … Em M0 M1 M2 … … … Mn
阶符
阶值
尾符 尾数值
计算机组成原理
2
一个机器浮点数由阶码和尾数及其符号位组成: 尾数:用定点小数表示,给出有效数字的位数,决定了浮点数的表示精度 阶码:用定点整数形式表示,指明小数点在数据中的位置,决定了浮点数 的表示范围。
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
计算机组成原理
13
IEEE754 规格化浮点数表示范围
格式
最小值
最大值
单精度
Emin=1, M=0, 1.0×21-127 = 2-126
Emax=254, f=1.1111…, 1.111…1×2254-127 = 2127×(2-2-23)
双精度 Emin=1, M=0, 1.0×21-1023 =2-1022
对阶: [△E]补= [ Ex]补-[Ey]补=00 10+ 11 11= 00 01
浮点数表示形式
浮点数表示形式
浮点数表示形式是计算机中用来表示小数的一种方法,与定点数表示形式相对应。
由于计算机中的数据都是以二进制形式存储的,因此对于小数,我们无法像十进制那样精确表示每一位小数。
为了解决这个问题,计算机中引入了浮点数表示形式。
浮点数表示形式将小数部分和指数部分分开表示,例如:3.14159可以表示为1+3.14159E-1。
其中3.14159是小数部分,E-1是指数部分,表示10的负一次方。
通过这种方式,浮点数可以表示很大或很小的小数,以及包含小数部分的数。
浮点数表示形式有多种,包括单精度浮点数、双精度浮点数、IEEE 754标准等。
不同的表示形式有不同的精度和范围,以满足不同的需求。
浮点数的两种表示方法
浮点数的两种表示方法
浮点数的两种表示方法如下:
1. 字节表示法:将浮点数转换为计算机能够理解和处理的二进制数,通常用于计算机内部进行计算和存储。
在大多数编程语言中都有字节表示法的支持,例如Java中的IEEE 754标准。
2. 舍入取值表示法:将浮点数转换为整数,并考虑舍入误差和二进制位上的噪声。
这种表示方法常用于printf函数中,将浮点数输出为文本或控制台窗口。
在大多数编程语言中也有舍入取值表示法的支持,例如C语言中的默认舍入规则和自定义舍入规则。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
②-5转换成二进制值为:-101
在IEEE754中规格化表示为1.01×22, e=127+2=129, IEEE754编码为:1 10000001 01000000000000000000000
IEEE754标准浮点数表示
例 将十进制数9和5/32转换为IEEE754标准的单精度数, 并用8位十六进 制表示
阶码采用移码不影 响表示范围,但机 器数与补码表示时 不同
最小正数:2-1×2b
最大负数:-(2-(n-1)+2-1)×2b (绝对值最小的负数) 最小负数:-1×2a (绝对值最大的负数)
浮点数的阶码决定了浮点数的表示范围;浮点数的尾数决 定了浮点数的表示精度。
练习
设机器数字长为 24 位,欲表示±3万的十进制数, 试问在保证数的最大精度的前提下,除阶符、数符各 取1 位外,阶码、尾数各取几位?
解答(1)
9= (-1)0×1001=(-1)0×23 ×1.001 =(-1)0×2130-127 ×1.001
二进制代码为:
0 10000010
00100000000000000000000
即:41100000H
解答(2)
5/32= (-1)0×0101×2-5
=(-1)0×2-5×22×1.01
解: ∵
214 = 16384
215 = 32768
∴ 15 位二进制数可反映 ±3 万之间的十进制数 215 × 0.××× … ××× k = 4, 5, 6, …
满足 最大精度 可取 k = 4,n = 18
?位
主要内容
浮点数的表示格式 规格化 IEEE754
“Father” of the IEEE 754 standard
IEEE754标准浮点数表示
例 写出下列十进制数据的IEEE754编码 ① 0.15625 ②-5
解:① 0.15625转换成二进制值为0.00101,
在IEEE754中规格化表示为1.01×2-3, e=127-3=124,
IEEE754编码为:0 01111100 01000000000000000000000
浮点数的表示范围:-231×1 ~ 231× ) 2
9
25 1
表示范围
根据以上分析若某机字长为k+n,其中阶码k位(含一位符号位),
尾数n位(含一位符号位);
设 a=2(k-1)-1 b=-2(k-1) (阶码的最大值) (阶码的最小值)
则规格化数所能表示的范围为: 最大正数:(1-2-(n-1))×2a
双精度格式: 64位,符号位1位, E=11位, M=52位
1 E 11 M 尾数 52
S符号位
阶码
64位双精度形式
IEEE754标准浮点数表示
阶码用移码、尾数用原码,因为规格化原码尾数的最高为恒为1,为增加一 位的精度,该1在尾数中不表示出来,计算时在尾数前面自动加1. 1 8 23 E 1.M ( 原 码 规 格 化 ) 尾数 32位单精度形式
/~wkahan/ ieee754status/754story.html
Prof. William Kahan
IEEE754标准浮点数表示
单精度格式: 32位, 符号位1位,阶码 E=8位, 尾数 M=23位
1 E 8 M 尾数 23
S符号位
阶码 32位单精度形式
…
M1 M0
尾数的数值部分
Ms n k Es 和 k
代表浮点数的符号 其位数反映浮点数的精度 其位数反映浮点数的表示范围 共同表示小数点的实际位置
例 将 –58 表示成二进制定点数和浮点数,并写出它 在16位定点机中的三种机器数和浮点机中阶码为移码、 尾数为补码的形式(尾数10位,尾符1位,阶码含阶符 5位)。 x = – 111010 解: 二进制形式 定点表示 x = – 0000 111010
浮点数的溢出
作业3
3-1. 将下列十进制数表示成浮点规格化数,阶码4位(含符 号),分别用补码和移码表示;尾数6位(含符号),用 补码表示。 (1)19/512 (2) -19/512 3-2. 浮点数阶码4位(含阶符),尾数9位(含数符),均用补码表 示,求规格化和非规格化时数值范围。 3-3.设浮点数的格式为:第15位为符号位,第14位到第8位为 阶码,采用补码表示;第7位到第0位为尾数,与符号位一 起采用规格化的补码表示,基数为2。问:它能表示的正 数和负数的数值范围是什么?
问题
写出+0.125, -0.125的补码和移码表示。为什么用补码,移 码? 如何表示即有整数又有小数的数值数据,如12.25? 12.25用浮点数怎么表示? 为什么要对浮点数进行规格化?
引入
定点表示法的特点 定点数表示数的范围受字长限制,表示数的范围有 限; 定点表示的精度有限; 机器中,常用定点数表示纯整数和纯小数,表示即 有整数又有小数时比较麻烦。
主要内容
浮点数的表示格式 规格化 IEEE754
规格化
同一个浮点数表示不唯一,如:
1.11 × 20, 0.111 × 21
|x|>=0.5
①原码规格化后的尾数 正数为 0.1×…×的形式
负数为 1.1×…×的形式
②补码规格化后的尾数 正数为 0.1×…×的形式 负数为 1.0×…×的形式
最大正数 011111 5 2 -1=31
表示范围
最小正数 0 0.100000000 -1 2 最大正数 0.111111111 -9 1-2
② 规格化尾数表示范围如下: 最小负数 最大负数
二进制补码 1.000000000 1.011111111 -9 -1 十进制真值 -1 -(2 +2 )
例
将下列十进制数表示成浮点规格化数,阶码 4 位 ( 含符
号),分别用补码和移码表示;尾数 6位(含符号),用补码 表示(要求规格化)。 ① 19/512 ② -19/512
解: ① 19/512=10011×2-9=0.10011×2-4 阶码用补码表示为: 1100 010011
阶码用移码表示为: 0100 010011 ② -19/512=-10011×2-9=-0.10011×2-4 阶码用补码表示为: 1100 101101
阶码用移码表示为: 0100 101101
表示范围
例 设浮点数的的阶码6位(含符号位),尾数为10位(含符 号位),阶码和尾数都用补码表示,求其表示范围(规 格化)。
【例题分析】 ① 阶码范围: 最小负数 二进制补码100000 5 十进制真值 -2 =-32
最大负数 0 111111 -1
最小正数 000001 +1
00000001
00..00
-1 ×2-126
小结
理解规格化的意义、IEEE754表示中隐含隐含尾数最高拉 的意义; 给定一个真值,能用规格化浮点数表示该值(含IEEE754表 示); 给定一个浮点数表示的机器数(含IEEE754表示),能计算 其真值。
浮点数精度问题
1994年11月间各报纸有关Pentium处理器浮点瑕疵问题的 报告。Pentium芯片中浮点除法存在的问题甚至上了电视 节目David Leeterman Late Show的十大新闻排行榜。为 了换回所有问题芯片,Intel一共为此损失了3亿美元的资 金。
直到80年代初,各个机器内部的浮点数表示格式还没有统一 因而相互不兼容,机器之间传送数据时,带来麻烦 1970年代后期, IEEE成立委员会着手制定浮点数标准 1985年完成浮点数标准IEEE754的制定 现在所有计算机都采用IEEE754来表示浮点数 This standard was primarily the work of one person, UC Berkeley math professor William Kahan.
S符号位
阶码
即,如果要表示一个数,需要把该数写成: (-1)s × 1.M × 2(x)真值 而规格化浮点数形式是: (-1)s × 0.1M ×2(128+x)移码 = (-1)s × 1.M × 2(127+x)移码
e=127+x
相当于此时移码 的计算不是加 128,而是加 127
单精度数所表示的数值为 (-1)s × 1.M × 2e-127。 双精度数所表示的数值为 (-1)s × 1.M × 2e-1023。 其中: s=0表示正数,s=1表示负数;
浮点数在计算机中的表示格式如下:
MS E 数符 阶码 定点整数移码表示
或
M 尾数值 定点小数补码表示
ES E MS M 阶符 阶码 数符 尾数值 定点整数补码表示 定点小数补码表示
浮点数的表示格式
E 阶码 Es Ek-1 … E1E0 Ms Mn-1
阶 符 阶码的 数值部分 数 符 小数点位置
M 尾数
IEEE754的表示范围(单精度)
最大正数 最小正数
数符 阶码 0 11111110 0 00000001 尾数 11…11 00…00 真值 (2-2-23) ×2127 1 ×2-126
绝对值最大 1 的负数(最 小负数) 绝对值最小 1 的负数(最 大负数)
11111110
11..11
-(2-2-23) ×2127
解答(1)
1 10000001 01000000000000000000000 (-1)1×(1.25)×2129-127=-1×1.25×22 =-1.25×4=-5.0
解答(2) 3F880000H
0 01111111 00010000000000000000000 (-1)0×(1.0625)×2127-127=1×1.0625×20 =1.0625×1=1.0625