浮点数规格化和教案
第一节
X =(-1)S ×(1.M)×2E -127 e =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, 真值表示为:
s E -128x=(-1) ×(1.M)×2
它所表示的规格化的最大正数、最小正数、最大负数、最小负数是多少?
第二节
1、什么是IEEE754标准
用来规范化浮点数,其格式是
(1)32位
x=(-1) s ×(1.M)×2
(2)64位 E-127 e =E-127
x=(-1) s ×(1.M)×2E-1023 e =E-1023
其中,s 是符号位,M 是尾数,E 是阶码,e 是实际的指数值
表 三种形式的IEEE754浮点数格式
参数
浮点数字长
尾数长度P
符号位S
指数长度E
最大指数
最小指数
指数偏移量 单精度浮点数 双精度浮点数 扩充精度浮点数 32 23 1 8 +127 -126 +127 64 52 1 11 +1023 -1022 +1023 80 64 1 15 +16383 -16382 +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,IEEE745规定为127)
3、为什么阶码表示的最小指数是-126呢?
有2中描述可以得到,当偏移量为127时,若最小指数是-127,则127+(-127)=0,E=0,存在非规格化数
故取-126,这也符合E 的表示范围1~254。
二进制浮点数的表示,由于不同机器所选的基值、尾数位长度和阶码位长度不同,因此对浮点数表示有较大差别,这就不利于软件在不同计算机间的移植。美国IEEE (电子及电子工程师协会)为此提出了一个从系统结构角度支持浮点数的表示方法, 称之为IEEE 标准754(IEEE,1985) ,当今流行的计算机几乎都采用这一标准。
IEEE 754在标识符点数时, 每个浮点数均由3个部分组成:符号位S ,指数部分E 和尾数部分M 。
浮点数可采用以下四种基本格式:
(1)单精度格式(32位) :E=8位,M=23位。
(2)扩展单精度格式:E≥11位,M≥31位。
(3)双精度格式(64)位:E=11位,M=52位。
(4)扩展双精度格式(64位) :E≥15位,M≥63位。
其中,单精度格式(32位) 中的阶码为8位, 另有一位尾数的符号位S ,处在最高位。如图4.2.1所示。应该指出的是,浮点数的分数部分与有效位部分两者是不同的, 由于IEEE754标准约定在小数点左部有一位隐含位,从而使其有效位实际有24位,这样便使尾数的有效值变为1.M 。阶码部分采用移码表示, 移码值为127,从而使阶码值的范围由原来的1到254,经移码后变为-126到+127。 IEEE 754标准的单精度和双精度浮点数表示格式。其中,阶码值0和255分别用来表示特殊数值:当阶码值为255时,若分数部分为0,则表示无穷大;若分数部分不为0,则认为这是一个‘非数值’。当阶码和尾数均为0时则表示该数值为0,因为非零数的有效位总是≥1,因此特别约定,这表示为0。当阶码为0, 尾数不为0时,该数绝对值较小, 允许采用比最小规格化数还要小的数表示。概括起来,由32位单精度所表示的IEEE 754标准浮点数N 可以有如下的解释: 若E=0,且M=0,则N 为0。
若E=0,且M≠0,则N=(-1)S ·2-126·(0.M)。为非规格化数。
若1≤E≤254,则N=(-1)S ·2E-127·(1.M)。为规格化数。
若E=255,且M≠0,则N=NaN(‘非数值’)。
若E=255,且M=0,则N=(-1)S ∝(无穷大)。
由此可见, IEEE 754标准使0有了精确表示,同时也明确地表示了无穷大,所以,当a/0(a≠0)时得到结果值为±∞;当0/0时得到结果值较小的数,为了避免下溢而损失精度,允许采用比最小规格化数还要小的数来表示,这些数称为非规格化数(Denormalnumber)。应注意的是,非规格化数和正、负零的隐含位值不是1而是0。
下面举两个例子来说明IEEE 754标准浮点数的表示:
(1)N=-1.5,它的单精度格式表示为:
1 01111111 [***********]00000
其中,S=1,E=127,M=0.5,因此N=-1.5。
(2)以下的32位数所表示的单精度浮点数为多少?
1 10000001 [***********]00000
其中,S=1,E=129,M=0.25,由公式可知N=-5。
第1次课(第1章第1讲)
授课章节
课程简介
第1章 计算机系统概论
1.1 计算机的分类
1.2 计算机的发展简史
1.3 计算机的硬件
学时安排
课程简介 -------------------------- 0.5学时
第1章 计算机系统概论
1.1 计算机的分类
1.2 计算机的发展简史 -------------------------- 0.5学时
1.3 计算机的硬件 -------------------------- 1学时
教学目的
本次课的主要内容为有关计算机系统的组织和构成进行概要性介绍,为以后的进一步学习打下基础。通过本次课的学习,要求学生:
1. 明确本课程的地位和作用;
2. 了解计算机的分类和发展简史;
3. 理解计算机硬件系统的构成,以及计算机进行数据处理的过程。
教学难点和重点
本次课的教学难点在于:计算机硬件系统的构成和作用。
这点对于建立整机思想相当重要,类比人的计算处理过程进行介绍。
授课安排
本次课为课程的第一次课,首先要对课程在整个教学体系中的地位和作用进行讲解。同时该课程是本专业的考研统考课程,因此对于考研的要求也应结合考研大纲进行说明。
在此次课程中,主要对第一章的部分内容进行介绍。在介绍课本知识之前,要先带领学生一起认识计算机硬件各部件,并熟悉计算机硬件的功能划分。然后对于计算机的分类和发展简史,这些内容应该在以前的引论课程中已经介绍,可以简单地回顾下,但这里有关计算机性能指标的部分应该着重介绍下。
1.3节计算机的硬件部分是本次课的重点内容。这部分内容首先从手工计算开始分析,将完成一次计算所需的设备一一对应到计算机系统中。然后按照计算机中各部件——运算器、存储器、控制器、IO 设备的功能,进行概要性的介绍。
在课程的最后引入下次课要补充讲解的内容——计算机简化模型的基本概念。
考核要点
1. 冯诺依曼的计算机结构体系;
2. 计算机中各部件——运算器、存储器、控制器、IO 设备的功能和结构;
3. 计算机各部件配合工作的大致情况;