文档库 最新最全的文档下载
当前位置:文档库 › 第二章 浮点数的表达与运算

第二章 浮点数的表达与运算

第二章 浮点数的表达与运算
第二章 浮点数的表达与运算

浮点数的表示与运算

一、选择

1、在规格化浮点数运算中,若浮点数为25×1.10101,其中

尾数为补码表示,则该数需将尾数左移一位规格化

2、浮点数格式如下:1位阶符,6位阶码,1位数符,8位

尾数。若阶码用移码,尾数用补码表示,则浮点数所能表示数的范围是-263 ~(1-2-8)×263

3、某浮点机,采用规格化浮点数表示,阶码用移码表示(最

高位代表符号位),尾数用原码表示。下列哪个数的表示不是规格化浮点数?(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.111000

B.00.000111

C.11.101010

D.11.111101

5、按照IEEE654标准规定的32位浮点数(41A4C000)16对

应的十进制数是( D )

A.4.59375

B.-20.59375

C.-4.59375

D.20.59375

6、如果某单精度浮点数、某原码、某补码、某移码的32位

机器数为0xF0000000。这些数从大到小的顺序是移>补>原>浮

7、假定采用IEEE754标准中的单精度浮点数格式表示一个数

为45100000H,则该数的值是(+1.125)10×211

8、设浮点数共12位。其中阶码含1位阶符共4位,以2为

底,补码表示:尾数含1位数符共8位,补码表示,规格化。则该浮点数所能表示的最大正数是27-1

9、如果浮点数的尾数用补码表示,则下列(D )中的尾数

是规格化数形式。

A. 1.11000

B. 0.01110

C. 0.01010

D.1.00010

10、设浮点数的基数为4,尾数用原码表示,则以下(C )

是规格化的数。

A. 1.001101

B.0.001101

C.1.011011

D.0.000010

11、已知X=00.875×21,Y=0.625×22,设浮点数格式为阶符1位,阶码2位,数符1位,尾数3位,通过补码求出Z=X-Y 的二进制浮点数规格化结果是0111 011

12、IEEE754标准中的舍入模式可以用于二进制数也可以用于

十进制数,在采用舍入到最接近且可表示的值时,若要舍入两个有效数字形式,(12.5)D应该舍入为12

13、下列关于舍入的说法,正确的是(E )

A.不仅仅只有浮点数需要舍入,定点数在运算时也可能要

舍入

B. 在浮点数舍入中,只有左规格化时可能要舍入

C. 在浮点数舍入中,只有右规格化时可能要舍入

二、综合应用题

1、什么是浮点数的溢出?什么情况下发生上溢出?什么情况下发生下溢出?

2、现有一计算机字长32位(D31~D0),数符位是第31位。对于二进制1000 1111 1110 1111 1100 0000 0000 0000,1)表示一个补码整数,其十进制值是多少?

2)表示一个无符号整数,其十进制值是多少?

3)表示一个IEEE754标准的单精度浮点数,其值是多少?

3、已知十进制数X=-5/256、Y=+59/1204,按机器补码浮点数运算规则计算X-Y,结果用二进制表示,浮点数格式如下:阶符取2位,阶码取3位,数符取2位,尾数取9位。

4、设浮点数字长32位,其中阶码部分8位(含一位阶符),尾数部分24位(含一位数符),当阶码的基值分别是2和16时:

1)说明基值2和16在浮点数中如何表示。

2)当阶码和尾数军用补码表示,且尾数采用规格化形式时,给出两种情况下所能表示的最大正数真值和非零最小正数真值。

3)在哪种基值情况下,数的表示范围大?

4)两种基值情况下,对阶和规格化操作有何不同?

5、已知两个实数x=-68,y=-8.25,它们在C语言中定义为float 型变量,分别存放在寄存器A和B中。另外,还有两个寄存器C和D。A、B、C、D、都是32位的寄存器。请问(要求用十六进制表示二进制序列):

1)寄存器A和B中的内容分别是什么?

2)x和y相加后结果存放在C寄存器中,寄存器C中的内容是什么?

3)x和y相减后的结果存放在寄存器D中,寄存器D中的内容是什么?

6、设浮点数的格式如下(阶码和尾数均用补码表示,基数为

2):

1)将27/46转换为浮点数2)将-27/46转换为浮点数

7、两个规格化浮点数进行加/减法运算,最后对结果规格化

时,能否确定需要右规的次数?能否确定需要左规的次数?

8、对于下列每个IEEE754单精度值,解释它们所表示的是哪一种数字类型(规格化数、非规格化数、无穷大、0)。当它们表示某个具体数值时,请给出该数值。

1)0b0000 0000 0000 0000 0000 0000 0000 0000

2)0b0100 0010 0100 0000 0000 0000 0000 0000

3)0b1000 0000 0100 0000 0000 0000 0000 0000

4)0b1111 1111 1000 0000 0000 0000 0000 0000

9、IBM370的短浮点数格式中,总位数为32位,左边第一

位(b0)为数符,随后七位(b1~b7)为阶码,用移码表示,偏置常数为64,右边24位(b8~b31)为6为16进制原码小数表示的尾数,采用规格化形式表示。若将十进制数-265.625用该浮点数格式表示,则应表示为(用十六进制形式表示)

A. C3109A00H

B. 43109A00H

C. 83109A00H

D. 03109A00H

10、IBM370的短浮点数格式中,总位数为32位,左边第一

位(b0)为数符,随后七位(b1~b7)为阶码,用移码表示,偏置常数为64,右边24位(b8~b31)为6为16进制原码小数表示的尾数,采用规格化形式。若将十进制数-260.125用该浮点数格式表示,则应表示为什么?(用十六进制形式表示)

11、IBM370的短浮点数格式中,总位数为32位,左边第一

位(b0)为数符,随后七位(b1~b7)为阶码,用移码表示,偏置常数为64,右边24位(b8~b31)为6为16进制原码小数表示的尾数,采用规格化形式。假定一个数表示成该浮点数格式为40100110H(用十六进制形式表示),则该数的真值是多少?

12、把十进制数x=(+128.75)×2-10写成浮点表示的机器数,

其中阶码、尾数分别用原码反码和补码表示。设阶码4位,阶符1位,尾数15位,尾数符号1位。

13、设字长32的浮点数,阶码10位用移码表示,尾数22

位用补码表示,基数为2,其格式如下:

1)求最大数的二进制表示;2)求最小数的二进制表示;3)求规格化的范围

14、有一个字长为32位的浮点数,阶码10位(包括1位阶

符),用移码表示:尾数22位(包括1位尾符)用补码表示,基数r=2。请写出:

1)其所能表达的最大数,用二进制表示;

2)其所能表达的最小数,用二进制表示;

3)规格化数所能表示的数的范围;

4)最接近于零的正规格化数与负规格化数。

15、两规格化浮点数相乘,是否可能需要右规?为什么?是

否可能需要左规?若需要,能否确定左规的次数?

16、两规格化浮点数相乘,是否可能需要左规?为什么?是

否可能需要右规?若需要,能否确定左规的次数?

17、设阶为5位(包括2位阶符),尾数为8位(包括2位数

符),阶码、尾数均用补码表示,完成下列取值的[x+y],[x-y]运算:

1)x=2-011×0.100101,y=2-010×(-0.011110)

2)x=2-101×(-0.010110),y=2-100×0.010110

18、已知两浮点数:A=(-0.010011)×2-010,B=(+0,110111)

×2+001.假定阶码和尾数都用补码表示,阶码4位(含1位符号位),尾数7位(含1位符号位)。试按规格化补码加法规则和步骤,采用“0舍1入”法,求[A+B]补=?

19、用浮点数运算步骤对56+5进行二进制运算,浮点数格

式为1位符号位、5位阶码位、10位尾码,基数为2。

算术逻辑运算单元ALU

一、选择

1、并行加法器中,每位全和的形式除与本位相加二数数值位

有关外,还与低位数送来的进位有关

2、ALU作为运算器的核心部件,其属于组合逻辑电路

3、在串行进位的并行加法器中,影响加法器运算速度的关键

因素是进位传递延迟

4、加法器中每一位的进位生成信号g为X i Y i

5、用8片74181 和两片74182 可组成二级先行进位结构的

32位ALU

6、组成一个运算器需要多个部件,但下面()不是组成运

算器的部件。

A. 状态寄存器

B. 数据总线

C.ALU

D. 地址寄存器

7、加法器采用并行进位的目的是提高加法器运算速度

8、算术/逻辑单元74181可完成16种算术运算功能和16种

逻辑运算功能。

9、使用74LS181这种器件来构成一个16位的ALU,需要使

用 4 片74LS181。

10、用4片74181和1片74182相配合,具有组内、组间均

为并行进位传递功能。

11、用8片74181和2片74182可组成二级先行进位结构的

32位ALU。

二、综合应用题

1、一个由4个一位全加器构成的加法器,其进位链小组信号

为C4、C3、C2、C1,各全加器的操作数位A i、B i(1≤i≥4)低位来的进位信号C0,请分别按下述两种方式写出C1、C2、C3和C4的逻辑表达式。

1)串行进位方式2)并行进位方式

数的定点表示和浮点表示

计算机处理的数值数据多数带有小数,小数点在计算机常有两种表示方法,一种是约定所有数值数据的小数点隐含在某一个固定位置上,称为定点表示法,简称定点数;另一种是小数点位置可以浮动,称为浮点表示法,简称浮点数。 1. 定点数表示法(fixed-point) 所谓定点格式,即约定机器中所有数据的小数点位置是固定不变的。在计算机常采用两种简单的约定:将小数点的位置固定在数据的最高位之前,或者是固定在最低位之后。一般常称前者为定点小数,后者为定点整数。 定点小数是纯小数,约定的小数点位置在符号位之后、有效数值部分最高位之前。若数据x的形式为x=x0.x1x2… xn(其中x0为符号位,x1~xn是数值的有效部分,也称为尾数,x1为最高有效位),则在计算机中的表示形式为: 一般说来,如果最末位xn= 1,前面各位都为0,则数的绝对值最小,即|x|min= 2-n。如果各位均为1,则数的绝对值最大,即|x|max=1-2-n。所以定点小数的表示围是:

2-n≤|x|≤1 -2-n 定点整数是纯整数,约定的小数点位置在有效数值部分最低位之后。若数据x的形式为x=x0x1x2…xn(其中x0为符号位,x1~xn是尾数,xn为最低有效位),则在计算机中的表示形式为: 定点整数的表示围是: 1≤|x|≤2n-1 当数据小于定点数能表示的最小值时,计算机将它们作0处理,称为下溢;大于定点数能表示的最大值时,计算机将无法表示,称为上溢,上溢和下溢统称为溢出。 计算机采用定点数表示时,对于既有整数又有小数的原始数据,需要设定一个比例因子,数据按其缩小成定点小数或扩大成定点整数再参加运算,运算结果,根据比例因子,还原

浮点数加法运算

浮点加减运算 对任意一个二进制数N,总可以表示成:N=2E×M ,式中,E为数N的阶码,M称为数N的尾数,一般为绝对值小于1的规格化数(补码是允许为-1)。 两浮点数X,Y进行加减运算时,必须按以下几步执行: ①对阶,使两数的小数点位置对齐,小的阶码向大的阶码看齐。 ②尾数求和,将对阶后的两尾数按定点加减运算规则求和(差)。 ③规格化,为增加有效数字的位数,提高运算精度,必须将求和(差)后的尾数规格化。 ④舍入,为提高精度,要考虑尾数右移时丢失的数值位。 ⑤判断结果,即判断结果是否溢出。 规格化又分左规和右规两种 (1) 左规。当尾数出现00.0××…×或11.1××…×时,需左规。左规时尾数左移一位,阶码减1,直到符合补码规格化表示式为止(2) 右规。当尾数出现01.××…×或10.××…×时,表示尾数溢出,这在定点加减运算中是不允许的,但在浮点运算中这不算溢出,可 通过右规处理。右规时尾数右移一位,阶码加1. 例,两浮点数x=2+010 ×0.110100,y=2+100 ×(-0.101010),求x+y。 解:阶码取3位,尾数取6位(均不包括符号位),机器表示的形式分别为[x]补= 0010 0110100 [y]补= 0100 1010110 ①对阶:先求阶差(两阶码的补码相减) 00 010 + 11 100 (减00 100 就是加—00100的补码,即11 100) 11 110 其真值为-2,即x的阶码比y的阶码小2 [x] 补的阶码增大成0100,尾数右移两位,即[x] 补 = 0100 0001101 ②尾数相加 00.001101 + 11.010110 11.100011 相加结果为0100 1 100011 ③规格化: 最高有效位与符号位相同,需要左规,所以结果应为: [x+y] 补 = 0011 1 000110 x+y = 2+011 ×(-0.111010) 4.舍入 在对阶和右规的过程中,可能会将尾数的低位丢失,引起误差,影响了精度,为此可用舍入法来提高尾数的精度。常用的舍入方法有三种。 (1)截去法。将多余的位截去,剩下的位不变。其最大误差接近于数据最低位上的1。

浮点数的表示和基本运算

浮点数的表示和基本运算 1 浮点数的表示 通常,我们可以用下面的格式来表示浮点数 S P M 其中S是符号位,P是阶码,M是尾数 对于IBM-PC而言,单精度浮点数是32位(即4字节)的,双精度浮点数是64位(即8字节)的。两者的S,P,M所占的位数以及表示方法由下表可知 S P M表示公式偏移量 1823(-1)S*2(P-127)*1.M127 11152(-1)S*2(P-1023)*1.M1023 以单精度浮点数为例,可以得到其二进制的表示格式如下 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+38 Console.WriteLine(float.MinValue); //-3.402823E+38 Console.WriteLine(float.Epsilon); // 1.401298E-45 //如果我们把它们转换成双精度类型,它们的值如下 Console.WriteLine(Convert.ToDouble(float.MaxValue)); // 3.40282346638529E+38 Console.WriteLine(Convert.ToDouble(float.MinValue)); //-3.40282346638529E+38 Console.WriteLine(Convert.ToDouble(float.Epsilon)); // 1.40129846432482E-45 那么这些值是如何求出来的呢? 根据上面的约定,我们可以知道阶码P的最大值是11111110(这个值是254,因为255用于特殊的约定,那么对于可以精确表示的数来说,254就是最大的阶码了)。尾数的最大值是11111111111111111111111。 那么这个最大值就是:0 11111110 11111111111111111111111。 也就是 2(254-127) * (1.11111111111111111111111)2 = 2127 * (1+1-2-23) = 3.40282346638529E+38 从上面的双精度表示可以看出,两者是一致的。最小的数自然就是- 3.40282346638529E+38。 对于最接近于0的数,根据IEEE754的约定,为了扩大对0值附近数据的表示能力,取阶码P = -126,尾数 M = (0.00000000000000000000001)2 。此时该数的二进制表示为:0 00000000 00000000000000000000001 也就是2-126 * 2-23 = 2-149 = 1.40129846432482E-45。这个数字和上面的Epsilon 是一致的。 如果我们要精确表示最接近于0的数字,它应该是 0 00000001 00000000000000000000000 也就是:2-126 * (1+0) = 1.17549435082229E-38。 3 浮点数的精度问题 浮点数以有限的32bit长度来反映无限的实数集合,因此大多数情况下都是一个近似值。同时,对于浮点数的运算还同时伴有误差扩散现象。特定精度下看似

浮点数表示方法与运算

在计算机系统的发展过程中,曾经提出过多种方法表达实数,典型的比如定点数。在定点数表达方式中,小数点位置固定,而计算机字长有限,所以定点数无法表达很大和很小的实数。最终,计算机科学发展出了表达范围更大的表达方式——浮点数,浮点数也是对实数的一种近似表达。 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的数称为规格化数。即当尾数的最高有效位S 1=1,[S]原=S f 1S 2S 3…S n ,表示该浮点数为规格化数。对0.001001×25进行规格化后,表示为0.100100×23。 3.浮点数的表示范围 求浮点数的表示范围,实质是求浮点数所能表示的最小负数、最大负数、最小正数和最大正数。

浮点数的表示和运算(范围计算)

浮点数的表示和运算 浮点数的表示和基本运算 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+38 Console.WriteLine(float.MinValue); //-3.402823E+38 Console.WriteLine(float.Epsilon); // 1.401298E-45 //如果我们把它们转换成双精度类型,它们的值如下 Console.WriteLine(Convert.ToDouble(float.MaxValue)); // 3.40282346638529E+38 Console.WriteLine(Convert.ToDouble(float.MinValue)); //-3.40282346638529E+38 Console.WriteLine(Convert.ToDouble(float.Epsilon)); // 1.40129846432482E-45 那么这些值是如何求出来的呢?

浮点数的表示和计算

《计算机组成原理》实验报告

sw $aO, O($fp) #calculate the first nu mber andi $s2, $s0, 0x80000000 # s2 is the sig n srl $s2, $s2, 31 andi $s3, $s0, 0x7f800000 # s3 is the exp onent srl $s3, $s3, 23 andi $s4, $s0, 0x007fffff # s4 is the fractio n addi $s4, $s4, 0x00800000 #calculate the seco nd number andi $s5, $s1, 0x80000000 # s5 is the sig n srl $s5, $s5, 31 andi $s6, $s1, 0x7f800000 # s6 is the exp onent srl $s6, $s6, 23 andi $s7, $s1, 0x007fffff # s7 is the fractio n addi $s7, $s7, 0x00800000 sub $t0, $s3, $s6 bit $t0, 0, sumL1 # add sub bgt $t0, 0, sumL2 # sub add beq $t0, 0, sumL3 2.减法指令如下: mysub: subu $sp, $sp, 32 sw $ra, 20($sp) sw $fp, 16($sp) addiu $fp, $sp, 28 sw $a0, 0($fp) #calculate the first nu mber andi $s2, $s0, 0x80000000 # s2 is the sig n srl $s2, $s2, 31 andi $s3, $s0, 0x7f800000 # s3 is the exp onent srl $s3, $s3, 23 andi $s4, $s0, 0x007fffff # s4 is the fractio n addi $s4, $s4, 0x00800000 #calculate the seco nd number xori $s5, $s1, 0x80000000 # s5 is the sig n srl $s5, $s5, 31 andi $s6, $s1, 0x7f800000 # s6 is the exp onent srl $s6, $s6, 23 andi $s7, $s1, 0x007fffff # s7 is the fractio n addi $s7, $s7, 0x00800000 sub $t0, $s3, $s6 blt $t0, 0, subL1 # +,- bgt $t0, 0, subL2 # -,+ beq $t0, 0, subL3 # +,+ or -,- 3.乘法指令如下: mutilStart: srl $t2, $s0, 31 srl $t3, $s1, 31 sll $t4, $s0, 1

浮点数加减运算课件

如果一个二进制浮点数的尾数的绝对值小于1并且大于等于0.5,(1>|尾数|≥0.5),那么这个二进制浮点数就是一个规格化的浮点数。 用二进制补码表示1个规格化的浮点数,并且规格化的浮点数的尾数只有一个符号位时: 规格化的浮点数的尾数是正数时应该是0 . 1 X X X X X X X X X ……的形式 (0表示符号位,X表示0或1中的任意一个数值) 规格化的浮点数的尾数是负数时应该是1 . 0 X X X X X X X X X ……的形式 (1表示符号位,X表示0或1中的任意一个数值) 用二进制补码表示1个规格化的浮点数,并且规格化的浮点数的尾数只有两个符号位时: 规格化的浮点数的尾数是正数时应该是00 . 1 X X X X X X X X X ……的形式 (00表示符号位,X表示0或1中的任意一个数值) 规格化的浮点数的尾数是负数时应该是11 . 0 X X X X X X X X X ……的形式 (11表示符号位,X表示0或1中的任意一个数值) 两个浮点数加减法的计算结果必须规格化,如果不是规格化的数,则要通过修改阶码并同时左移或者右移尾数,使其变为规格化的数。 [例] x=2010×0.11011011,y=2100×-0.10101100,浮点数均以补码表示,阶码采用双符号位,尾数采用单符号位。求x+y 。 答: (步骤1)转换成题目中要求的浮点数格式: 浮点数x=2010×0.11011011的阶码是+010,尾数是+0.11011011 浮点数均以补码表示,所以阶码以补码表示,并且阶码采用双符号位, [x]浮的阶码=00010(00是两个符号位) 浮点数均以补码表示,所以尾数以补码表示,并且尾数采用单符号位, [x]浮的尾数=0.11011011(0是1个符号位)

浮点数的加减乘除运算步骤

设两个浮点数X=Mx※2Ex Y=My※2Ey 实现X±Y要用如下5步完成: ①对阶操作:小阶向大阶看齐 ②进行尾数加减运算 ③规格化处理:尾数进行运算的结果必须变成规格化的浮点数,对于双符号位的补码尾数来说,就必须是001×××…×× 或110×××…××的形式, 若不符合上述形式要进行左规或右规处理。 ④舍入操作:在执行对阶或右规操作时常用“0”舍“1”入法将右移出去的尾数数值进行舍入,以确保精度。 ⑤判结果的正确性:即阶码是否溢出 若阶码下溢(移码表示是00…0),要置结果为机器0; 若阶码上溢(超过了阶码表示的最大值)置溢出标志。 例题:假定X=0 .0110011*211,Y=0.1101101*2-10(此处的数均为二进制)?? 计算X+Y;解:[X]浮:0 1010 1100110 [Y]浮:0 0110 1101101 符号位阶码尾数 第一步:求阶差:│ΔE│=|1010-0110|=0100 第二步:对阶:Y的阶码小,Y的尾数右移4位 [Y]浮变为0 1010 0000110 1101暂时保存 第三步:尾数相加,采用双符号位的补码运算 00 1100110 +00 0000110 00 1101100 第四步:规格化:满足规格化要求 第五步:舍入处理,采用0舍1入法处理 故最终运算结果的浮点数格式为:0 1010 1101101, 即X+Y=+0. 1101101*210

①阶码运算:阶码求和(乘法)或阶码求差(除法) 即[Ex+Ey]移= [Ex]移+ [Ey]补 [Ex-Ey]移= [Ex]移+ [-Ey]补 ②浮点数的尾数处理:浮点数中尾数乘除法运算结果要进行舍入处理 例题:X=0 .0110011*211,Y=0.1101101*2-10 求X※Y 解:[X]浮:0 1 010 ******* [Y]浮:0 0 110 1101101 第一步:阶码相加 [Ex+Ey]移=[Ex]移+[Ey]补=1 010+1 110=1 000 1 000为移码表示的0 第二步:原码尾数相乘的结果为: 0 10101101101110 第三步:规格化处理:已满足规格化要求,不需左规,尾数不变,阶码不变。第四步:舍入处理:按舍入规则,加1进行修正 所以X※Y= 0.1010111※2+000

浮点数计算方式

2.3.4二进制转10进制及10进制转为二进制 【例2-3-4】 把二进制110.11转换成十进制数,及十进制转为二进制。 解: (110.11)2 =1×22+1×21+1×20+1×2-1+1×2-2 =4+2+0+0.5+0.25=(6.75)10 把十进制转换为二进制 解: 2 6 0 2 3 1 1 1 所以实数部分为110 0.75×(2×2-1)=0.75×2×2-1 =1×2-1+0.5×2-1 =1×2-1+1×2-2 所以结果为:(110.11)2 2.3.5 浮点数在计算机中存储形式 当前主流微机中广泛采用的IEEE754标准浮点格式。 按IEEE754标准,常用的浮点数(32位短实数)的格式如图2-3所示。

IEEE754标准浮点格式 N=2e.M (M为浮点尾数,为纯小数,e为浮点数的指数(阶码))尾数部分决定了浮点数的精度,阶码决定了表示范围32为浮点数(IEEE754标准格式0—22为尾数M,23-30为阶码E,31为符号位S),阶码用移码表示。阶码E=指数真值e+127 规格化真值x=(-1)^S*(1.M)*2^(E-127) 将(82.25)10 转换成短浮点数格式。 1)先将(82.25)10 转换成二进制数 (82.25)10 =(1010010.01)2 2)规格化二进制数(1010010.01)2 1010010.01=1.01001001×2 6 尾数M=01001001 3)计算移码表示的阶码=偏置值+阶码真值: E=127+6=133=10000101 4)以短浮点数格式存储该数 因此:符号位=0 S=0表示该数为正数 阶码=10000101 由3)可得 尾数=01001001000000000000000 由2)可得;尾数为23位, 不足在后面添15位0 所以,短浮点数代码为: 0;10000101;01001001000000000000000 表示为十六进制代码为:42A48000H

数的定点表示和浮点表示

计算机处理的数值数据多数带有小数,小数点在计算机中通常有两种表示方法,一种是约定所有数值数据的小数点隐含在某一个固定位置上,称为定点表示法,简称定点数;另一种是小数点位置可以浮动,称为浮点表示法,简称浮点数。 1. 定点数表示法(fixed-point) 所谓定点格式,即约定机器中所有数据的小数点位置是固定不变的。在计算机中通常采用两种简单的约定:将小数点的位置固定在数据的最高位之前,或者是固定在最低位之后。一般常称前者为定点小数,后者为定点整数。 定点小数是纯小数,约定的小数点位置在符号位之后、有效数值部分最高位之前。若数据x的形式为x=x0.x1x2… xn(其中x0为符号位,x1~xn是数值的有效部分,也称为尾数,x1为最高有效位),则在计算机中的表示形式为: 一般说来,如果最末位xn= 1,前面各位都为0,则数的绝对值最小,即|x|min= 2-n。如果各位均为1,则数的绝对值最大,即|x|max=1-2-n。所以定点小数的表示范围是:

2-n≤|x|≤1 -2-n 定点整数是纯整数,约定的小数点位置在有效数值部分最低位之后。若数据x的形式为x=x0x1x2…xn(其中x0为符号位,x1~xn是尾数,xn为最低有效位),则在计算机中的表示形式为: 定点整数的表示范围是: 1≤|x|≤2n-1 当数据小于定点数能表示的最小值时,计算机将它们作0处理,称为下溢;大于定点数能表示的最大值时,计算机将无法表示,称为上溢,上溢和下溢统称为溢出。 计算机采用定点数表示时,对于既有整数又有小数的原始数据,需要设定一个比例因子,数据按其缩小成定点小数或扩大成定点整数再参加运算,运算结果,根据比例因子,还原

单片机浮点数计算

在单片机应用系统的数据处理过程中,经常会遇到小数的运算问题,如求解BCD的增量算式、线性化处理等。因此,需要用二进制数来表示小数。表示小数的方法一般有两种,定点数和浮点数。定点数结构简单,与整数的运算过程相同,运算速度快。但随着所表示数的范围的扩大,其位数成倍增加,给运算和存储带来不便,而且也不能保证相对精度不变。浮点数的结构相对复杂,但它能够以固定的字节长度保持相对精度不变,用较少的字节表示很大的数的范围,便于存储和运算,在处理的数据范围较大和要求精度较高时,采用浮点数。 浮点数的概念 常用的科学计数法来表示一个十进制数如 l234.75=1.23475E3=1.23475×103 在数据很大或很小时,采用科学计数避免了在有效数字前加0来确定小数点的位置,突出了数据的有效数字的位数,简化了数据的表示。可以认为,科学计数法就是十进制数的浮点数表示方法。 在二进制效中,也可以用类似的方法来表示一个数,如 1234.75=10011010010.11(二进制)=0.1001101001011×211 一般表达式为 N=S×2p 在这种表示方法中,数值由四个部分组成,即尾数S及符号,阶码P及符号。 在二进制中,通过定义相应字节或位来表示这四部分,就形成了二进制浮点数。二进制浮点数可以有多种不同的表示方法,下面是一种常见的三字节浮点数的格式: 其中尾数占16位,阶码占6位,阶符占1位,数符占1位。阶码通常用补码来表示。 在这种表示方法中,小数点的实际位置要由阶码来确定,而阶码又是可变的,因此称为浮点数。 1234.75用这种格式的浮点数表示就是: 0000 1011 1001 1010 0101 1000 用十六进制表示为 1234.75=0B9A58H -1234.75=4B9A58H 0.171875=043B00H -0.171875=443B00H 三字节浮点数所能表示的最大值为 1×263=9.22×1018 能表示的最小数的绝对值为 0.5×2-63=5.42×10-20 其所表示的数的绝对值范围=(5.42×10-20~9.22×1018),由此可以看到,比三字节定点数表示的数的范围大得多。 按同样方法可以定义一个四字节的浮点数,以满足更高精度的需要。 规格化浮点数 同一个数用浮点数表示可以是不同的,如 1234.75=0B9A58H=0C4D2CH=0D2696H 虽然这几种表示其数值是相同的,但其尾数的有效数字的位数不同,分别为16位、15位和14位。在运算过程中,为了最大限度地保持运算精度,应尽量增加尾数的有效位数。这就需要对浮点数进行规格化处理。 在只考虑用二进制原码表示尾数时,尾数的最高位为l,则该浮点数为规格化浮点数。在规格化浮点数中,用尾数为0和最小阶码表示0,三字节规格化浮点数的0表示为410000H。 浮点数在运算之前和运算之后都要进行规格化,规格化过程包括以下步骤: (1)首先判断尾是否为0,如果为0,规格化结果为410000H; (2)如果尾数不为0,判断层数的最高位是否为1,如果不为1,尾数左移,阶码减1; (3)再判断层数的最高位是否为1,如果不为1,继续进行规格化操作,如果为1,则规格化结束。 浮点数运算

浮点数的加减法运算

计算机组成与结构 之 浮点数的加减法运算 学生组所在学院:燕山大学信息学院 学生组所在班级:2014级计算机1 班 学生组姓名:陈朝俊张海傅晓欣曲佳彤

地址:中国河北省秦皇岛市河北大街438号邮编:066004 电话: 传真: 网址:

浮点数加减法运算简介 大型计算机和高档微型机中,浮点加减法运算是由硬件完成的。低档的微型机浮点加减法运算是由软件完成的,但不论用硬件实现还是软件实现,基本原理是一致的。 浮点加减法运算要经过对阶、尾数加减运算、结果规格化、舍入处理、溢出判断五步操作。其中尾数运算与定点加减法运算相同,而对阶、规格化、舍入和溢出判断,则是浮点加减法运算和定点加减法运算不同的操作之处。 在补码浮点运算中,阶码与尾数可以都用补码表示。在硬件实现的运算中,阶码和数符常采用双符号位。 浮点数的表示形式 浮点数的表示形式(假设以2为底): N=M·2E 其中,M为浮点数的尾数,一般为绝对值小于1的规格化二进制小数,用原码或补码形式表示;E为浮点数的阶码,一般是用移码或补码表示的整数。 阶码的底除了2以外,还有用8或16表示的,这里暂且只以2为底进行讨论。

浮点数加减法运算的步骤 设两浮点数X、Y进行加减运算,其中:X=M X·2EX,Y=M Y·2EY 一般由以下五个步骤完成:

规 格 化 浮 点 数 加 减 运 算 流 程 一、对阶 1.对阶是指将两个进行运算的浮点数的阶码对齐的操作。对阶的目

的是为了使两个浮点数的尾数能够进行加减运算。因为,当进行MX·2EX 与MY·2EY加减运算时,只有使两浮点数的指数值部分相同,才能将相同的指数值作为公因数提出来,然后进行尾数的加减运算。 2.对阶的具体方法是:首先求出两浮点数阶码的差,即ΔE=Ex-Ey,将小阶码加上ΔE,使之与大阶码相等,同时将小阶码对应的浮点数的尾数右移ΔE位,以保证该浮点数的值不变。 3.几点注意: (1)对阶的原则是小阶对大阶,因为若大阶对小阶,则尾数的数值部分的高位需移出,而小阶对大阶移出的是尾数的数值部分的低位,这样损失的精度更小。 (2)若ΔE=0,说明两浮点数的阶码已相同,无需再做对阶操作。(3)尾数右移时,对原码表示的尾数,符号位不参加移位,尾数数值部分的高位补0;对补码表示的尾数,符号位参加右移,并保持原符号位不变。 (4)由于尾数右移时是将最低位移出,会损失一定的精度,为减少误差,可先保留若干移出的位,供以后舍入处理用。 二、尾数的加减运算

浮点数计算实例

浮点数表示法示例 目前C/C++编译器标准都遵照IEEE制定的浮点数表示法来进行float,double运算。这种结构是一种科学计数法,用符号、指数和尾数来表示,底数定为2——即把一个浮点数表示为尾数乘以2的指数次方再添上符号。下面是具体的规格: 符号位阶码尾数长度 float 1 8 23 32 double 1 11 52 64 通通表示为1.f * 2^n 因为浮点数中的小数部分= x1*1/2 + x2*1/4 + .....+xn*1/(2^n)来近似,所有这就是浮点数的精度问题。 以下通过几个例子讲解浮点数如何转换为二进制数 例一: 已知:double类型38414.4。 求:其对应的二进制表示。 分析:double类型共计64位,折合8字节。由最高到最低位分别是第63、62、61、……、0位: 最高位63位是符号位,1表示该数为负,0表示该数为正; 62-52位,一共11位是指数位; 51-0位,一共52位是尾数位。 步骤:按照IEEE浮点数表示法,下面先把38414.4转换为十六进制数。 把整数部和小数部分开处理:整数部直接化十六进制:960E。小数的处理: 0.4=0.5*0+0.25*1+0.125*1+0.0625*0+…… 实际上这永远算不完!这就是著名的浮点数精度问题。所以直到加上前面的整数部分算够53位就行了。隐藏位技术:最高位的1不写入内存(最终保留下来的还是52位)。 如果你够耐心,手工算到53位那么因该是:38414.4(10)=1001011000001110.0110011001100110011001100110011001100 ...... 1100110011001101...... (2) 科学记数法为:1.001011000001110 0110011001100110011001100110011001100,右移了15位,所以指数为15。或者可以如下理解: 1.001011000001110 0110011001100110011001100110011001100×2^15 于是来看阶码,按IEEE标准一共11位,可以表示范围是-1024 ~ 1023。因为指数可以为负,为了便于计算,规定都先加上1023(2^10-1),在这里,阶码:15+1023=1038。二进制表示为:100 00001110; 符号位:因为38414.4为正对应为0; 合在一起(注:尾数二进制最高位的1不要): 0 1000000 1110 0010 11000001 110 01100 11001100 11001100 11001100 11001100 例二:已知:整数3490593(16进制表示为0x354321)。求:其对应的浮点数3490593.0的二进制表示。 解法如下: 先求出整数3490593的二进制表示: H: 3 5 4 3 2 1 (十六进制表示) B: 0011 0101 0100 0011 0010 0001 (二进制表示) │←──────21─────→│ 即:1.1010101000011001000012×221 可见,从左算起第一个1后有21位,我们将这21为作为浮点数的小数表示,单精度浮点数float由符号位1位,指数域位k=8位,小数域位(尾数)n=23位构成,因此对上面得到的21位小数位我们还需要补上2个0,得到浮点数的小数域表示为: 1 0101 0100 0011 0010 0001 00

浮点数运算

浮点数的表示和基本运算 [收藏此页] [打印] 【IT168知识库】 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 127 1 11 5 2 (-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+38 Console.WriteLine(float.MinValue); //-3.402823E+38 Console.WriteLine(float.Epsilon); // 1.401298E-45 //如果我们把它们转换成双精度类型,它们的值如下 Console.WriteLine(Convert.ToDouble(float.MaxValue)); // 3.40282346638529E+38 Console.WriteLine(Convert.ToDouble(float.MinValue)); //-3.40282346638529E+38 Console.WriteLine(Convert.ToDouble(float.Epsilon)); // 1.40129846432482E-45 那么这些值是如何求出来的呢? 根据上面的约定,我们可以知道阶码P的最大值是11111110(这个值是254,因为255用于特殊的约定,那么对于可以精确表示的数来说,254就是最大的阶码了)。尾数的最大值是11111111111111111111111。 那么这个最大值就是:0 11111110 11111111111111111111111。 也就是2(254-127)* (1.11111111111111111111111)2= 2127* (1+1-2-23) = 3.40282346638529E+38 从上面的双精度表示可以看出,两者是一致的。最小的数自然就是-3.40282346638529E+38。 对于最接近于0的数,根据IEEE754的约定,为了扩大对0值附近数据的表示能力,取阶码P = -126,尾数M = (0.00000000000000000000001)2。此时该数的二进制表示为:0 00000000 00000000000000000000001 也就是2-126* 2-23= 2-149 = 1.40129846432482E-45。这个数字和上面的Epsilon是一致的。 如果我们要精确表示最接近于0的数字,它应该是0 00000001 00000000000000000000000 也就是:2-126* (1+0) = 1.17549435082229E-38。 3 浮点数的精度问题 浮点数以有限的32bit长度来反映无限的实数集合,因此大多数情况下都是一个近似值。同时,对于浮点数的运算还同时伴有误差扩散现象。特定精度下看似相等的两个浮点数可能并不相等,因为它们的最小有效位数不同。 由于浮点数可能无法精确近似于十进制数,如果使用十进制数,则使用浮点数的数学或比较运算可能不会产生相同的结果。 如果涉及浮点数,值可能不往返。值的往返是指,某个运算将原始浮点数转换为另一种格式,而反向运算又将转换后的格式转换回浮点数,且最终浮点数与原始浮点数相等。由于一个或多个最低有效位可能在转换中丢失或更改,往返可能会失败。 4 将浮点数表示为二进制

第二章 浮点数的表达与运算

浮点数的表示与运算 一、选择 1、在规格化浮点数运算中,若浮点数为25×1.10101,其中 尾数为补码表示,则该数需将尾数左移一位规格化 2、浮点数格式如下:1位阶符,6位阶码,1位数符,8位 尾数。若阶码用移码,尾数用补码表示,则浮点数所能表示数的范围是-263 ~(1-2-8)×263 3、某浮点机,采用规格化浮点数表示,阶码用移码表示(最 高位代表符号位),尾数用原码表示。下列哪个数的表示不是规格化浮点数?(B ) 阶码尾数 A.,1.1000 (00) B.,1.0111 (01) C.,0.1111 (01) D.,0.1000 (10) 4、设浮点数阶的基数为8,尾数用模4补码表示。试指出下 列浮点数中哪个是规格化数?(C ) A.11. B.00. C.11. D.11. 5、按照IEEE654标准规定的32位浮点数(41A4C000)16对 应的十进制数是(D ) A.4.59375 B.-20.59375 C.-4.59375 D.20.59375 6、如果某单精度浮点数、某原码、某补码、某移码的32位 机器数为0xF。这些数从大到小的顺序是移>补>原>浮 7、假定采用IEEE754标准中的单精度浮点数格式表示一个数 为H,则该数的值是(+1.125)10×211 8、设浮点数共12位。其中阶码含1位阶符共4位,以2为 底,补码表示:尾数含1位数符共8位,补码表示,规格化。则该浮点数所能表示的最大正数是27-1 9、如果浮点数的尾数用补码表示,则下列(D )中的尾数 是规格化数形式。 A. 1.11000 B. 0.01110 C. 0.01010 D.1.00010 10、设浮点数的基数为4,尾数用原码表示,则以下(C ) 是规格化的数。 A. 1. B.0. C.1. D.0. 11、已知X=00.875×21,Y=0.625×22,设浮点数格式为阶符1位,阶码2位,数符1位,尾数3位,通过补码求出Z=X-Y 的二进制浮点数规格化结果是0111 011 12、IEEE754标准中的舍入模式可以用于二进制数也可以用于 十进制数,在采用舍入到最接近且可表示的值时,若要舍入两个有效数字形式,(12.5)D应该舍入为12 13、下列关于舍入的说法,正确的是(E ) A.不仅仅只有浮点数需要舍入,定点数在运算时也可能要 舍入 B. 在浮点数舍入中,只有左规格化时可能要舍入 C. 在浮点数舍入中,只有右规格化时可能要舍入 D. 在浮点数舍入中,左、右规格化均可能要舍入

浮点数的加减运算一般由以下五个步骤完成

浮点数的加减运算一般由以下五个步骤完成: 对阶 ↓ 尾数运算 ↓ 结果规格化 ↓ 舍入处理 ↓ 溢出判断 设两浮点数X、Y进行加减运算,其中 X=M x·2Ex,Y=M y·2Ey 1. 对阶 所谓对阶是指将两个进行运算的浮点数的阶码对齐的操作。对阶的目的是为使两个浮点数的尾数能够进行加减运算。因为,当进行M x·2Ex与M y·2Ey加减运算时,只有使两浮点数的指数值部分相同,才能将相同的指数值作为公因数提出来,然后进行尾数的加减运算。 对阶的具体方法是:首先求出两浮点数阶码的差,即⊿E=E x-E y,将小阶码加上⊿E,使之与大阶码相等,同时将小阶码对应的浮点数的尾数右移相应位数,以保证该浮点数的值不变。几点注意: (1)对阶的原则是小阶对大阶,之所以这样做是因为若大阶对小阶,则尾数的数值部分的高位需移出,而小阶对大阶移出的是尾数的数值部分的低位,这样损失的精度更小。 (2)若⊿E=0,说明两浮点数的阶码已经相同,无需再做对阶操作了。 (3)采用补码表示的尾数右移时,符号位保持不变。 (4)由于尾数右移时是将最低位移出,会损失一定的精度,为减少误差,可先保留若干移出的位,供以后舍入处理用。 2. 尾数运算 尾数运算就是进行完成对阶后的尾数相加减。这里采用的就是我们前面讲过的纯小数的定点数加减运算。 3. 结果规格化 在机器中,为保证浮点数表示的唯一性,浮点数在机器中都是以规格化形式存储的。对于IEEE754标准的浮点数来说,就是尾数必须是1.M的形式。由于在进行上述两个定点小数的尾数相加减运算后,尾数有可能是非规格化形式,为此必须进行规格化操作。 规格化操作包括左规和右规两种情况。 左规操作:将尾数左移,同时阶码减值,直至尾数成为1.M的形式。例如,浮点数0.0011·25是非规格化的形式,需进行左规操作,将其尾数左移3位,同时阶码减3,就变成1.1100·22规格化形式了。 右规操作:将尾数右移1位,同时阶码增1,便成为规格化的形式了。要注意的是,右规操作只需将尾数右移一位即可,这种情况出现在尾数的最高位(小数点前一位)运算时出现了进位,使尾数成为10.xxxx或11.xxxx的形式。例如,10.0011·25右规一位后便成为1.00011·26的规格化形式了。 4. 舍入处理

定点与浮点运算的比较

定点与浮点运算DSP的比较 定点运算DSP在应用中已取得了极大的成功,而且仍然是DSP应用的主体。然而,随着对DSP处理速度与精度、存储器容量、编程的灵活性和方便性要求的不断提高、自80年代中后期以来,各DSP生产厂家陆续推出了各自的32bit 浮点运算DSP。 和定点运算DSP相比,浮点运算DSP具有许多优越性: 浮点运算DSP比定点运算DSP的动态范围要大很多。定点DSP的字长每增加1bit,动态范围扩大6dB。16bit字长的动态范围为96dB。程序员必须时刻关注溢出的发生。例如,在作图像处理时,图像作旋转、移动等,就很容易产生溢出。这时,要么不断地移位定标,要么作截尾。前者要耗费大量的程序空间和执行时间,后者则很快带来图像质量的劣化。总之,是使整个系统的性能下降。在处理低信噪比信号的场合,例如进行语音识别、雷达和声纳信号处理时,也会发生类似的问题。而32bit浮点运算DSP的动态范围可以作到1536dB,这不仅大大扩大了动态范围,提高了运算精度,还大大节省了运算时间和存储空间,因为大大减少了定标,移位和溢出检查。 由于浮点DSP的浮点运算用硬件来实现,可以在单周期内完成,因而其处理速度大大高于定点DSP。这一优点在实现高精度复杂算法时尤为突出,为复杂算法的实时处理提供了保证。 32bit浮点DSP的总线宽度较定点DSP宽得多,因而寻址空间也要大得多。这一方面为大型复杂算法提供了可能、因为省的DSP目标子程序已使用到几十MB存储器或更多;另一方面也为高级语言编译器、DSP操作系统等高级工具软件的应用提供了条件。 DSP的进一步发展,必然是多处理器的应用。新型的浮点DSP已开始在通信口的设置和强化、资源共享等方面有所响应。

相关文档
相关文档 最新文档