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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 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