浮点数规格化和教案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一节
X=(-1)S×(1.M)×2E-127e=E-127
X=(-1)S×(1.M)×2E-1023 e=E-1023
我承认以前对这俩公式避之不及不予深究努力自己说服自己而未能得逞,部分原因是跟“移码与真值的关系”扯上关系,这“移码与真值的关系”想搞清先得把引入移码的充分理由给我个说法,不幸玩过头正事误了。上回说了“补码省心移码悦目”能算是今时不同往日了吧,现在轮到对IEEE754浮点数规格化表示法杀无赦去死吧。
首先,“IEEE规格化形式”是对“传统规格化形式”进一步严格要求来的。
IEEE规格化形式唯一,而浮点数记法多种多样。
(1.75)10=1.11×20 (IEEE规格化表示)=0.111×21 (传统规格化表示)
=0.0111×22=0.00111×23
其次,既然IEEE想到对“传统规格化形式”进一步修订当然有目的,你以为作无用功呐,关键目的是什么?
规格化的目的同理。修改阶码同时左右移小数点使尾数域最高有效位固定为1,尾数就以ta所可能变化成的最大形式出现,即使遭遇类似截断的操作仍可保持尽可能高的精度。
有类错误我这种大秀逗极善于犯!就是不理会左右关系不经过大脑直接作问题少女状问很白的问题:“‘移码和真值的关系’是E=27(或210)+X,那X=E-27(或210),在怎么着里面数该是128(或1024),咋是127(或1023)?”
当E=M=全0
E(移码)=全0,对应真值-128
M(补码)=全0,对应真值0
E=M=全0,真值X=0-128=0
结合符号位S 为0或1分正零和负零
当E=全1,M=全0
E(移码)=全1,对应真值+127
M(补码)=全0,对应真值0
E=全1,M=全0,真值X=0127=∞
结合符号位S 为0或1分+∞和-∞
要除去表示零和无穷大这2种特殊情况
指数偏移值不选128(10000000),而选127(01111111)
对IEEE32位规格化浮点数
8位移码(隐含1位符号位)原本表示范围是-128 →+127
(除去全1(+127)全0(-128)剩下-127 →+126 ???)
实际可用指数值(即阶码真值)e范围是-126→+127
加上偏移值后,阶码E的范围变为1→254
以10的幂表示,绝对值的范围是10-38→1038
假设由S,E,M三个域组成的一个32位二进制字所表示的非零规格化浮点数x,真值表示为:x=(-1)s×(1.M)×2E-128
它所表示的规格化的最大正数、最小正数、最大负数、最小负数是多少?
第二节
1、什么是IEEE754标准
用来规范化浮点数,其格式是
(1)32位
x=(-1)s ×(1.M)×2
E-127 e =E-127
(2)64位 x=(-1)s ×(1.M)×2E-1023 e =E-1023
其中,s 是符号位,M 是尾数,E 是阶码,e 是实际的指数值
表 三种形式的IEEE754浮点数格式
参数
单精度浮点数 双精度浮点数 扩充精度浮点数 浮点数字长
32 64 80 尾数长度P
23 52 64 符号位S
1 1 1 指数长度E
8 11 15 最大指数
+127 +1023 +16383 最小指数
-126 -1022 -16382 指数偏移量 +127 +1023 +16383
可表示的实数范围 10-38~1038 10-308~10308 10-4932~104932
2、为什么阶码的偏移量是127?
先看下什么机器零:
(1)当浮点数尾数M=0,无论阶码E 为何值,则该浮点数为0值
(2)当阶码的值遇到比它所能表示的最小值还小时,不管尾数M 为何值,则浮点数为0值
(1)、(2)中的零值称为机器零
以32位浮点数为例:
"当阶码E 为全0且尾数M 也为全0时,表示的真值x 为零,结合符号位S 为0或1,有正零和负零之分。当阶码E 为全1且尾数M 为全0时,表示的真值x 为无穷大,结合符号位S 为0或1,也有+∞和-∞之分。这样在32位浮点数表示中,要除去E 用全0(-128)和全1(255)10表示零和无穷大的特殊情况,指数的偏移值不选128(10000000),而选127(01111111)。对于规格化浮点数,E 的范围变为1到254,真正的指数值e则为-126到+127。因此32位浮点数表示的绝对值的范围是10-38~1038(以10的幂表示)。"——引自白中英<<计算机组成原理>>
S(1位) E(8位) M(23位) N(32位)
符0 0 (-1)S *2E-127·(1.M) 为规格化
数
0 不等于0 (-1)S*2-126*(0.M) 为非规格化数
号1到254之间不等于0 (-1)S*2E-127*(1.M) 为规格化数
255 不等于0 NaN(非数值)
位255 0 无穷大
其中红色字0、1表示隐含位,注意当数字N为非规格化数或是0时,隐含位是0。
如果选择偏移值128时,假设指数(不是阶码)为+127,则阶码为127+128=255,全为1 ,由上表可知N为NaN和无穷大
假设指数为0(包括正0和负0),正0+128=128,负0(补码)+128=0,由上可知E=0时,存在非规格化数
由于8位E中,7位表示有效数字,不能从这7位下手,只能更改偏移值为127(可以是0~127,I EEE745规定为127)
3、为什么阶码表示的最小指数是-126呢?
有2中描述可以得到,当偏移量为127时,若最小指数是-127,则127+(-127)=0,E=0,存在非规格化数
故取-126,这也符合E的表示范围1~254。
二进制浮点数的表示,由于不同机器所选的基值、尾数位长度和阶码位长度不同,因此对浮点数表示有较大差别,这就不利于软件在不同计算机间的移植。美国IEEE(电子及电子工程师协会)为此提出了一个从系统结构角度支持浮点数的表示方法,称之为IEEE标准754(IEEE,1985),当今流行的计算机几乎都采用这一标准。