文档库 最新最全的文档下载
当前位置:文档库 › 定点浮点运算

定点浮点运算

定点浮点运算
定点浮点运算

一、填空

1.影响并行加法器速度的关键因素是()

2.A、B均为8位二进制数,A=F0H,B=E0H,则A+B=(),A-B=()

3.已知某数的补码为11110101,算术左移1位后得(),算术右移一位后得()

4.向左规格化的规则为:尾数(),阶码()

5.运算器的基本功能是实现()()运算

二、选择

1.补码加减法是指()

A.操作数用补码表示,尾数相加减,符号位单独处理

B.操作数用补码表示,符号位和尾数一起参加运算,结果的符号位与加减数相同。C.操作数用补码表示,连同符号位直接相加,减某数用加某数的机器负数代替,结果的符号在运算中形成。

D.操作数用补码表示,由数符决定俩尾数的操作,符号位单独处理。

2.两补码数相加,采用单符号位,当(),表示结果溢出

A.符号位有进位

B.符号位进位和最高数位进位异或结果为0

C.符号位为1

D.符号位进位和最高数位进位异或结果为1

3.在双符号位判断溢出的方案中,出现正溢出时,双符号位应当为()

4.在定点机中执行算术运算时会产生溢出,原因是()

A.主存容量不够

B.操作数过大

C.操作数地址过大

D.运算结果无法表示

5.对于二进制数,若小数点左移1位,则数值(),若小数点右移1位,则数值()A.扩大一倍,扩大一倍

B.扩大一倍,缩小一半

C.缩小一半,扩大一倍

D.缩小一半,缩小一半

6.若浮点数用补码表示,判断运算结果是否为规格化数的方法是()

A.阶符与数符相同

B.阶符与数符不同

C.数符与尾数最高有效数位相同

D.数符与尾数最高有效数位相异

7.4片74181ALU与1片74182CLA配合,具有如下进位传递功能()

A.串行进位

B.组内并行进位,组间串行进位

C.组内串行进位,组间并行进位

D.组内组间均为并行进位

浮点数结构详解

附录D What Every Computer Scientist Should Know About Floating-Point Arithmetic 注 – 本附录是对论文《What Every Computer Scientist Should Know About Floating- Point Arithmetic》(作者:David Goldberg,发表于 1991 年 3 月号的《Computing Surveys》)进行编辑之后的重印版本。版权所有 1991,Association for Computing Machinery, Inc.,经许可重印。 D.1摘要 许多人认为浮点运算是一个深奥的主题。这相当令人吃惊,因为浮点在计算机系统中是普 遍存在的。几乎每种语言都有浮点数据类型;从 PC 到超级计算机都有浮点加速器;多 数编译器可随时进行编译浮点算法;而且实际上,每种操作系统都必须对浮点异常(如 溢出)作出响应。本文将为您提供一个教程,涉及的方面包含对计算机系统设计人员产生 直接影响的浮点运算信息。它首先介绍有关浮点表示和舍入误差的背景知识,然后讨论 IEEE 浮点标准,最后列举了许多示例来说明计算机生成器如何更好地支持浮点。 类别和主题描述符:(主要)C.0 [计算机系统组织]:概论—指令集设计;D.3.4 [程 序设计语言]:处理器—编译器,优化;G.1.0 [数值分析]:概论—计算机运算,错 误分析,数值算法(次要) D.2.1 [软件工程]:要求/规范—语言;D.3.4 程序设计语言]:正式定义和理论— 语义;D.4.1 操作系统]:进程管理—同步。 一般术语:算法,设计,语言 其他关键字/词:非规格化数值,异常,浮点,浮点标准,渐进下溢,保护数位,NaN, 溢出,相对误差、舍入误差,舍入模式,ulp,下溢。 D-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长度来反映无限的实数集合,因此大多数情况下都是一个近似值。同时,对于浮点数的运算还同时伴有误差扩散现象。特定精度下看似

单精度浮点乘法器

EDA/SOPC课程设计报告题目:单精度浮点乘法器 姓名:张恺 学号:120260230 同组人:刘龙 指导教师:王晨旭 成绩:

目录 目录................................................................................................................................................... II 第1章课程设计的要求 . (1) 1.1 课程设计的目的 (1) 1.2 课程设计的条件 (1) 1.3 课程设计的要求 (1) 第2章课程设计的内容 (2) 2.1 设计思路 (2) 2.1.1 符合IEEE-754标准的单精度浮点乘法器规格 (2) 2.1.2 操作数类型 (2) 2.1.3 运算规则 (3) 2.1.4 逻辑门级框图 (3) 2.2 软件流程图 (4) 2.3 HDL代码阐述 (6) 2.4 Modelsim验证 (10) 2.4.1 验证代码 (10) 2.4.2 验证波形 (12) 2.5 硬件调试 (12) 2.5.1 基本说明 (12) 2.5.2 具体操作 (13) 2.6 虚拟机下的DC综合 (17) 2.7 虚拟机下的SDF反标仿真 (19) 第3章课程设计的心得 (20)

第1章课程设计的要求 1.1 课程设计的目的 ●通过课堂所讲授的内容以及私下查阅资料,自主完成课程设计的题目,提高编 程能力,培养用计算机解决实际问题的能力,积累调试程序的经验,更好的消化 老师课堂所讲授的内容,对Verilog这种语言也有了更深的了解; ●掌握较大工程的基本开发技能; ●培养综合运用Modelsim,ISE,Debussy工具进行硬件开发的能力; ●培养数字系统设计的基本能力; ●通过课设积累起的编程以及硬件的能力对于今后的考研抑或是找工作都有非常实 际性的效果; 1.2 课程设计的条件 ●设计条件1:gVim编辑器以及Mentor公司开发的FPGA仿真软件Modelsim; ●设计条件2:Xilinx公司开发的硬件设计工具ISE以及Xilinx公司的开发板; ●设计条件3:虚拟机环境下的Linux系统具有的Design Compiler工具; ●设计条件4:虚拟机环境下的Linux系统具有的SDF工具以及Debussy工具; 1.3 课程设计的要求 ●设计要求1:能够在Modelsim工具下正确的完成程序的编译以及成功的实现波 形的仿真; ●设计要求2:能够在ISE工具下正确的完成程序的综合以及合理的绑定管脚并成 功的将程序下载到开发板里,在开发板中实现程序的功能; ●设计要求3:能够在虚拟机的Linux系统下采用Design Compiler完成逻辑综 合,并且评估其时序面积; ●设计要求4:能够在虚拟机的Linux系统下完成SDF反标仿真;

浮点数表示方法与运算

在计算机系统的发展过程中,曾经提出过多种方法表达实数,典型的比如定点数。在定点数表达方式中,小数点位置固定,而计算机字长有限,所以定点数无法表达很大和很小的实数。最终,计算机科学发展出了表达范围更大的表达方式——浮点数,浮点数也是对实数的一种近似表达。 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.浮点数的表示范围 求浮点数的表示范围,实质是求浮点数所能表示的最小负数、最大负数、最小正数和最大正数。

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

设两个浮点数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

浮点乘法器模板

EDA课程设计 课设名称:浮点乘法器 课设日期: 2014.6.23——7.xx 姓名:朱鹏勇 学号: 110250425 哈尔滨工业大学(威海) 信电学院电子信息工程 2014.6

一.所用软件与硬件介绍 1.1 软件介绍 QuartusII是Alter提供的FPGA/CPLD开发集成环境,Altera是世界上最大的可编程逻辑器件供应商之一。Quartus II在21世纪初推出时,是Altera前一代FPGA/CPLD集成开发环境MAX+plus II的更新换代产品,其界面友好,使用便捷。Altera的Quartus II提供了完整的多平台设计环境,能满足各种特定设计的需要,也是单芯片可编程系统(SOPC)设计的综合性环境和SOPC开发的基本设计工具。 1.2 硬件介绍 EDA试验箱 FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。具有如下特点: 一、采用FPGA设计ASIC电路(专用集成电路),用户不需要投片生产,就能得到合用的芯片。 二、FPGA可做其它全定制或半定制ASIC电路的中试样片。 三、FPGA内部有丰富的触发器和I/O引脚。 四、FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一。

FPGA采用高速CHMOS工艺,功耗低,可以与CMOS、TTL电平兼容。 二。系统设计 2.1设计思想 2.1.1课题背景 随着计算机和信息技术的快速发展, 人们对微处理器的性能要求越来越高。运算器是数字信号处理过程中的重要基本组成部分,绝大多数FPGA都使用定点数据格式进行运算处理,对高精度、数据范围较大的运算无能为力,而浮点数比定点数的表述范围宽,有效精度高,更适合科学计算与工程计算,因此需要设计一种高速的浮点运算单元 2.1.2 设计目的 1、弄清浮点乘法器运算规则 2、设计标准的浮点IEEE574乘法器。 3、实现浮点乘法功能。 2.2工作原理及系统框图 1.浮点格式简介 常用的浮点格式为IEEE 754标准。该标准定义 了单精度浮点数、双精度浮点数和扩展双精度浮点数 3种格式,单精度为32位,双精度为64位,扩展双精 度为80位以上,位数越多则精度越高,表示范围也越 大。在通常的数字信号处理应用中,单精度浮点数即可满足处理精度要求。单精度浮点数如图所示。

浮点数在计算机中的存储方式

C语言和C#语言中,对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用32bit,double数据占用64bit,我们在声明一个变量float f= 2.25f的时候,是如何分配内存的呢?如果胡乱分配,那世界岂不是乱套了么,其实不论是float还是double在存储方式上都是遵从IEEE 的规范的,float遵从的是IEEE R32.24 ,而double 遵从的是R64.53。 无论是单精度还是双精度在存储中都分为三个部分: 1.符号位(Sign) : 0代表正,1代表为负 2.指数位(Exponent):用于存储科学计数法中的指数数据,并且采用移 位存储 3.尾数部分(Mantissa):尾数部分 其中float的存储方式如下图所示: 而双精度的存储方式为: R32.24和R64.53的存储方式都是用科学计数法来存储数据的,比如8.25 用十进制的科学计数法表示就为:8.25*,而120.5可以表示 为:1.205*,这些小学的知识就不用多说了吧。而我们傻蛋计算机根本不认 识十进制的数据,他只认识0,1,所以在计算机存储中,首先要将上面的数更改为二进制的科学计数法表示,8.25用二进制表示可表示为1000.01,我靠,不会连这都不会转换吧?那我估计要没辙了。120.5用二进制表示为:1110110.1用二进制的科学计数法表示1000.01可以表示为

1.0001*,1110110.1可以表示为1.1101101*,任何一个数都的科学计 数法表示都为1.xxx*,尾数部分就可以表示为xxxx,第一位都是1嘛,干嘛还要表示呀?可以将小数点前面的1省略,所以23bit的尾数部分,可以表示的精度却变成了24bit,道理就是在这里,那24bit能精确到小数点后几位呢,我们知道9的二进制表示为1001,所以4bit能精确十进制中的1位小数点,24bit就能使float能精确到小数点后6位,而对于指数部分,因为指数可正可负,8位的指数位能表示的指数范围就应该为:-127-128了,所以指数部分的存储采用移位存储,存储的数据为元数据+127,下面就看看8.25和120.5在内存中真正的存储方式。 首先看下8.25,用二进制的科学计数法表示为:1.00001* 按照上面的存储方式,符号位为:0,表示为正,指数位为:3+127=130 ,位数部分为,故8.25的存储方式如下图所示: 而单精度浮点数120.5的存储方式如下图所示:

浮点运算

STM32-F4属于Cortex-M4构架,与M0、M3的最大不同就是有硬件浮点运算FPU,数学计算速度相比普通cpu运算快上几十倍。想要使用FPU首先包含#include “arm_math.h”,还有在keil的target选项中勾选use single precision。 1.1 简单的FPU运算性能测试 测试条件是开启一个100ms定时器,定时串口打印计算次数,优化级别是0,main函数中运行的代码如下: float a=1.1,b=1.2,c=1.3,d=1.4; 1、FPU运算474566次,CPU运算64688次,除法速度快了7.3倍多。 c = b / d; 2、FPU运算722169次,CPU运算244271次,乘法运算快了3倍。FPU的乘法运算比除法运算快1.5倍。 c = b * d; 3、FPU运算19398次,CPU运算19628次,FPU的双精度除法运算没有优势,比单精度运算慢了24.5倍 c = b / 1.4; 4、FPU运算503321次,CPU运算65450次,单精度常数和变量的运算差不多,单精度常数的除法快6%左右,这根编译器的关系比较大。 c = b / 1.4f; 5、FPU运算519073次,跟下面比较说明整形常数和单精度常数的除法运算速度几乎一样。

c = b / 3; 6、FPU运算519057次 c = b / 3.0f; 7、FPU运算263643次 c = arm_cos_f32(1.3f); 8、FPU运算3949次,说明IT给的DSP库运算速度还是很给力的,速度快了67倍 c = cos(1.3f); 1.2 代码设置 旧版本的keil设置如下,但是发现我使用的keil5包含的新固件库已经不需要这一步了。 如果没有启动FPU而使用数学函数运算时,CPU执行时认为遇到非法指令而跳转到HardFault_Handler()中断函数中死循环。因此,需要在系统初始化时开启FPU。在system_stm32f4xx.c中的SystemInit()函数中添加如下代码: /* FPU settings ------------------------------------------------------------*/ #if (__FPU_PRESENT == 1) && (__FPU_USED == 1) SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */ #endif 当__FPU_PRESENT=1且__FPU_USED=1时,编译时就加入了启动FPU的代码,CPU也就能正确高效的使用FPU进行简单的加减乘除。需要使用固件库自带的arm_math.h而非编译器自带的math.h,这个文件根据编译控制项(__FPU_USED ==1)来决定是使用哪一种函数方法:如果没有使用FPU,那就调用keil的标准math.h头文件中定义的函数;如果使用了FPU,那就是用固件库自带的优化函数来解决问题。

32位浮点加法器设计

32位浮点加法器设计 苦行僧宫城 摘要:运算器的浮点数能够提供较大的表示精度和较大的动态表示范围,浮点运算已成为现代计算程序中不可缺少的部分。浮点加法运算是浮点运算中使用频率最高的运算。因此,浮点加法器的性能影响着整个CPU的浮点处理能力。文中基于浮点加法的原理,采用Verilog硬件描述语言设计32位单精度浮点数加法器,并用modelsim对浮点加法器进行仿真分析,从而验证设计的正确性和可行性。 关键词:浮点运算浮点加法器 Verilog硬件描述语言 Studying on Relation of Technology and Civilization 苦行僧宫城 (School of Mechatronic Engineering and Automation, Shanghai University, Shanghai , China) Abstract: The floating-point arithmetic provides greater precision and greater dynamic representation indication range, with floating point calculations have become an indispensable part of the program. Floating-point adder is the most frequently used floating point arithmetic. Therefore, the performance of floating point adder affecting the entire CPU floating point processing capabilities. In this paper the principle-based floating-point addition, Verilog hardware description language design 32-bit single-precision floating-point adder and floating-point adder using modelsim simulation analysis in order to verify the correctness and feasibility of the desig 小组成员及任务分配: 1浮点数和浮点运算 1.1浮点数 浮点数是属于有理数中某特定子集的数的数字表示,在计算机中用以近似表示任意某个实数。具体的说,这个实数由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次幂得到,这种表示方法类似于基数为10的科学记数法。 1.2浮点格式 常用的浮点格式为IEEE 754 标准,IEEE 754 标准有单精度浮点数、双精度浮点数和扩展双精度浮点数3 种,单精度为32 位,双精度为64 位,扩展双精度为80 位以上,位数越多精度越高,表示范围也越大。在通常的数字信号处理应用中,单精度浮点数已经足够用了,本文将以它为例来设计快速浮点加法器。单精度浮点数如图1所示。 其中s为符号位,s为1 时表示负数,s为0时表示正数;e为指数,取值范围为[1,254],0和255表示特殊值;f有22位,再加上小数点左边一位隐含的1总共23位构成尾数部分。 1.3 浮点运算 浮点加法运算由一些单独的操作组成。在规格化的表示中,对于基为2的尾数的第1个非0位的1是隐含的,因此,可以通过不存储这一位而使表示数的数目增加。但在进行运算时不能忽略。浮点加法一般要用以下步骤完成: a) 指数相减:将2个指数化为相同值,通过比较2个指数的大小求出指数差的绝对值ΔE。 b) 对阶移位: 将指数较小的操作数的尾数右移ΔE位。 c) 尾数加减:对完成对阶移位后的操作数进行加减运算。

白中英《计算机组成原理》(第5版)教材精讲(运算方法和运算器 浮点运算方法和浮点运算器)

2.6 浮点运算方法和浮点运算器 一、浮点加法、减法运算 1.浮点加减运算 设有两个浮点数x和y,它们分别为 x=2Ex·Mx y=2Ey·My 其中Ex和Ey分别为数x和y的阶码,Mx和My为数x和y的尾数。两浮点数进行加法和减法的运算规则是 x±y=(Mx2Ex-Ey±My)2Ey,设Ex<=E。 2.浮点运算 步骤如下: (1)0操作数的检查,看有无简化操作的可能; (2)比较阶码大小并完成对阶(小阶向大阶对齐); (3)尾数进行加或减运算;

例:设1010,0.5,0.4375x y ==,假设尾数有效位为4位,用二进制形式求 ()x y +浮点运算。 解: 01 102220.50.10.12 1.0002x -===?=?02 102220.43750.01110..1112 1.1102y -=-=-=-?=?第一步,对阶:因y 阶小,调整y 的指数向2阶看齐 21 221.11020.1112y --=?=-?第2步,尾数相加: 111 2221.0002(0.1112)0.1112x y ---+=?+-?=?第3步,规格化: 234 2220.11120.1002 1.0002x y ---+=?=?=?第4步,检查上溢或下溢: 由于指数采用移码,1274126≥-≥-,求和结果既无上溢也无下溢

求和结果()x y + 浮421.0002-=?,尾数有效位恰好是4位,舍入时无需做任何改变。 最后结果:()x y +浮422101.00020.00010000.0625-=?==十进制数验证:10 0.510(0.437510)0.0625x y +=+=为突出浮点加减法运算中小数点位置必须对齐的概念,下面再举一个十进制数浮点加减法运算的例子。 例:设210100.3x E x x M =?=?,310100.2y E y y M =?=?。求x y +,x y -。 解:2,3,x y x y E E E E ==<,对阶时小阶向大阶看齐。 233(10)10(0.3100.2)10x y y E E E x y x y M M --+=?-?=?+?30.2310230 =?=233(10 )10(0.3100.2)10x y y E E E x y x y M M ---=?-?=?+? 3(0.17)10170 =-?=二、浮点乘法和除法运算 设有两个浮点数x和y: x=2E x·M x y=2E y·M y x×y=2(E x+E y)·(M x×M y)

浮点数的加减法运算

计算机组成与结构 之 浮点数的加减法运算 学生组所在学院:燕山大学信息学院 学生组所在班级: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)由于尾数右移时是将最低位移出,会损失一定的精度,为减少误差,可先保留若干移出的位,供以后舍入处理用。 二、尾数的加减运算

浮点运算

简介 当我们用不同的电脑计算圆周率时,会发现一台电脑的计算较另一台来讲结果更加精确。或者我们在进行枪战游戏的时候,当一粒子弹击中墙壁时,墙上剥落下一块墙皮,同样的场面在一台电脑上的表现可能会非常的呆板、做作;而在另外一台电脑上就会非常生动形象,甚至与我们在现实中看到的所差无几。这都是浮点运算能力的差异导致的。 定点与浮点 大学计算机基础中已经了解过计算机的实数表示方法可分为两种即定点与浮点 1、定点数: 定点数指小数点在数中的位置是固定不变的,通常有定点整数和定点小数。在对小数点位置作出选择之后,运算中的所有数均应统一为定点整数或定点小数,在运算中不再考虑小数问题。 (1)定义:数据中小数点位置固定不变的数 (2)种类:定点整数 (3)小数点在符号位与有效位之间。 注:定点数受字长的限制,超出范围会有溢出。 2、浮点数: 浮点数的表示形式有点像科学计数法(*.*****×10^***),它的表示形式是0.*****×10^***,在计算机中的形式为 .***** e ±***),其中前面的星号代表定点小数,也就是整数部分为0的纯小数,后面的指数部分是定点整数。利用这样的形式就能表示出任意一个整数和小数,例如1024就能表示成0.1024×10^4,也就是 .1024e+004,3.1415926就能表示成0.31415926×10^1,也就是 .31415926e+001,这就是浮点数。浮点数进行的运算就是浮点运算。 注:其浮点数的精度由尾数决定,数的表示范围由阶码决定。 浮点数,这个复杂点,有三种格式 单精度:_31_30________23_22___________0 符号指数有效数 双精度:_63_62__________52_51__________________0 符号指数有效数 扩展精度数: _79_78____________64_63___________________0 符号指数有效数 3、定点数与浮点数区别 定点表示法运算直观,但数的表示范围较小,不同的数运算时要考虑比例因子的选取,以防止溢出。浮点表示法运算时可以不考虑溢出,但浮点运算,编程较难。要掌握定、浮点数的

实数计算的常见类型及方法(1)

实数计算的常见类型及方法 【精练】计算 3-2÷3+(-)0-3-1+(-3)2-32 解:原式=3-+1-+9-9=3 在算3-2÷3时易算成1÷3=,另外(-3)2与-32是有区别的. 【知识规律串讲】 一、实数的运算 (1)加法 同号两数相加,取原来的符号,并把绝对值相加; 异号两数相加。取绝对值较大的数的符号,并用较大的绝对值减去较小的绝对值; 任何数与零相加等于原数。 (2)减法 a-b=a+(-b) (3)乘法 两数相乘,同号得正,异号得负,并把绝对值相乘;零乘以任何数都得零.即 (4)除法 (5)乘方 (6)开方如果x2=a且x≥0,那么=x;如果x3=a,那么 在同一个式于里,先乘方、开方,然后乘、除,最后加、减.有括号时,先算括号里面.3.实数的运算律 (1)加法交换律 a+b=b+a (2)加法结合律 (a+b)+c=a+(b+c) (3)乘法交换律 ab=ba. (4)乘法结合律 (ab)c=a(bc) (5)分配律 a(b+c)=ab+ac 其中a、b、c表示任意实数.运用运算律有时可使运算简便. 一、加法运算中的方法与技巧 例1 计算: (1)5-[2+(-4.8)-(-4)]

(2)|(-)-(-)+(-)| 分析:(1)题的关键是确定运算顺序,有括号的还应先计算括号内的; (2)题的关键是求出绝对值符号中式子的值,进而求出整个式子的值.进行有理数的混合计算时,小学学过的确定运算顺序的方法仍然适用 解(1)5-[2+(-4.8)-(-4)] =5-[2-4.8+4] =5-[7-4.8] =5-2.2=3 (2) |(-)-(-)+(-)| =|-+-| =|--+| =|-|= 【小结】巧用加法的交换律与结合律,以达到简化的目的,同时注意交换加数位置时,一定要连同前面的符号一起移动. 实数加法运算中通常有以下规律:互为相反数的两个数先相加—“相反数结合法”;符号相同的数先相加—“同号结合法”;分母相同的数先相加—“同分母结合法”;几个数相加得到整数先相加—“凑整法”;整数与整数,小数与小数相加—“同形结合法”. 二、乘、除运算中的方法与技巧 例2:计算: (1)4--÷;(2)--3××(-1)÷(-1).

浮点数运算

浮点数的表示和基本运算 [收藏此页] [打印] 【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 将浮点数表示为二进制

浮点运算器发展

浮点运算器 浮点运算器是进行浮点运算的结构。现阶段是用电路来实现,应用在计算机芯片中。是整数运算器之后的一大发展,因为在浮点运算器发明之前,计算机中的浮点运算是都是用整数运算来模拟的,效率十分低下。 浮点数表示法:由于所需表示的数值取值范围相差十分悬殊,给存储和计算带来诸多不便,因此出现了浮点运算法。 浮点表示法,即小数点的位置是浮动的。其思想来源于科学计数法。IEEE754的浮点数(比较特殊)浮点数的规格化:主要解决同一浮点数表示形式的不唯一性问题。规定,否则尾数要进行左移或右移。 机器零的概念:尾数为0或是阶码值小于所能表示的最小数。 浮点运算器的一般结构 浮点运算可用两个松散连接的定点运算部件来实现:即阶码部件和尾数部件,浮点运算器的一般结构尾数部件实质上就是一个通用的定点运算器,要求该运算器能实现加、减、乘、除四种基本算术运算。其中三个单字长寄存器用来存放操作数:AC为累加器,MQ为乘商寄存器,DR为数据寄存器。AC和MQ连起来还可组成左右移位的双字长寄存器AC-MQ。并行加法器用来完成数据的加工处理,其输入来自AC和DR,而结果回送到AC。MQ寄存器在乘法时存放乘数,而除法时存放商数,所以称为乘商寄存器。DR用来存放被乘数或除数,而结果(乘积或商与余数)则存放在AC-MQ。在四则运算中,使用这些寄存器的典型方法如下: 运算类别寄存器关系加法AC+DR→AC减法AC-DR→AC乘法DR×MQ→AC-MQ除法AC÷DR→AC-MQ 对阶码部件来说,只要能进行阶码相加、相减和比较操作即可。在图2-21中,操作数的阶码部分放在寄存器E1和E2,它们与并行加法器相连以便计算。浮点加法和减法所需要的阶码比较是通过E1-E2来实现的,相减的结果放入计数器E中,然后按照E的符号为决定哪一个阶码较大。在尾数相加或相减之前,需要将一个尾数进行移位,这是由计数器E来控制的,目的是使E的值按顺序减到0。E每减一次1,相应的尾数则向右移1位。一旦尾数高速完毕,它们就可按通常的定点方法进行处理。运算结果的阶码值仍放到计数器E中。 点协处理器,80x87是美国Intel公司为处理浮点数等数据的算术运算和多种函数计算而设计生产的专用算术运算处理器。由于它们的算术运算是配合80x86CPU进行的,所以又称为协处理器。现在我们以80x87为例来讨论浮点运算器部件的组成。浮点协处理器的主要功能如下:(1) 可与配套的CPU芯片异步并行工作。80x87相当于386的一个I/O部件,本身有它自己的指令,但不能单独使用,它只能作为386主CPU的协处理器才能运算。因为真正的读写主存的工作不是80x87完成,而是由386执行的。如果386从主存读取的指令是80x87浮点运算指令,则它们以输出方式把该指令送到80x87,80x87接收后进行译码

相关文档