单片机浮点数计算

上传人:人*** 文档编号:563400824 上传时间:2023-11-02 格式:DOCX 页数:16 大小:19.20KB
返回 下载 相关 举报
单片机浮点数计算_第1页
第1页 / 共16页
单片机浮点数计算_第2页
第2页 / 共16页
单片机浮点数计算_第3页
第3页 / 共16页
单片机浮点数计算_第4页
第4页 / 共16页
单片机浮点数计算_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《单片机浮点数计算》由会员分享,可在线阅读,更多相关《单片机浮点数计算(16页珍藏版)》请在金锄头文库上搜索。

1、在单片机应用系统的数据处理过程中,经常会遇到小数的运算问题,如求 解 BCD 的增量算式、线性化处理等。因此,需要用二进制数来表示小数。表示 小数的方法一般有两种,定点数和浮点数。定点数结构简单,与整数的运算过 程相同,运算速度快。但随着所表示数的范围的扩大,其位数成倍增加,给运 算和存储带来不便,而且也不能保证相对精度不变。浮点数的结构相对复杂,但它能够以固定的字节长度保持相对精度不变, 用较少的字节表示很大的数的范围,便于存储和运算,在处理的数据范围较大 和要求精度较高时,采用浮点数。浮点数的概念常用的科学计数法来表示一个十进制数如1234.75 = 1.23475E3 = 1.23475

2、x103在数据很大或很小时,采用科学计数避免了在有效数字前加0 来确定小数 点的位置,突出了数据的有效数字的位数,简化了数据的表示。可以认为,科 学计数法就是十进制数的浮点数表示方法。在二进制效中,也可以用类似的方法来表示一个数,如1234.75 = 0.11 (二进制)=0.1x211一般表达式为N=Sx2p在这种表示方法中,数值由四个部分组成,即尾数S及符号,阶码P及符 号。在二进制中,通过定义相应字节或位来表示这四部分,就形成了二进制浮 点数。二进制浮点数可以有多种不同的表示方法,下面是一种常见的三字节浮 点数的格式:其中尾数占16位,阶码占6位,阶符占1位,数符占1位。阶码通常用补 码

3、来表示。在这种表示方法中,小数点的实际位置要由阶码来确定,而阶码又是可变 的,因此称为浮点数。1234.75 用这种格式的浮点数表示就是:00 1011 1001 10 01 1000用十六进制表示为1234.75 = 0B9A58H-1234.75 = 4B9A58H0.171875 = 043B00H-0.171875=443B00H三字节浮点数所能表示的最大值为1x263 = 9.22x1018能表示的最小数的绝对值为0.5x2-63=5.42x1020其所表示的数的绝对值范围=(5.42x10-209. 22x1018),由此可以看到,比三字节定点数表示的数的范围大得多。按同样方法可以

4、定义一个四字节的浮点数,以满足更高精度的需要。规格化浮点数同一个数用浮点数表示可以是不同的,如1234.75=0B9A58H=0C4D2CH=0D2696H虽然这几种表示其数值是相同的,但其尾数的有效数字的位数不同,分别 为16位、15位和14位。在运算过程中,为了最大限度地保持运算精度,应尽 量增加尾数的有效位数。这就需要对浮点数进行规格化处理。在只考虑用二进制原码表示尾数时,尾数的最高位为I,则该浮点数为规格化浮点数。在规格化浮点数中,用尾数为0和最小阶码表示0,三字节规格化浮 点数的0表示为4100H。浮点数在运算之前和运算之后都要进行规格化,规格化过程包括以下步 骤:(1) 首先判断尾

5、是否为 0,如果为 0,规格化结果为 4100H;(2) 如果尾数不为0,判断层数的最高位是否为1,如果不为1,尾数左移, 阶码减1;(3) 再判断层数的最高位是否为1,如果不为1,继续进行规格化操作,如果 为 1,则规格化结束。浮点数运算浮点数运算包括加、减、乘、除四则运算,比较运算,开方运算,多项式 运算和函数运算。其它运算都可用这些基本运算的组合来完成。本节主要介绍 浮点数四则运算及其子程序。1浮点数的加、减运算浮点数的运算就是求结果的尾数、数符、阶码包括阶符的过程。在加、减 运算中,参加运算的浮点数的阶码可能是不同的,其尾数所代表的值也是不同 的。在这种情况下,尾数不能直接相加或相减,

6、必须首先使两个数的阶相同, 这一过程称为对阶。一般是让小阶向大阶对齐,尾数相应右移。对阶相当于算 术中的小数点对齐或代数中的通分。尾数相加或相减得到了结果的尾数。数符 由尾数的运算结果的符号确定。阶码就是两个数中较大的阶码。例1计算132.25+69.75解:132.25+69.75 = 088444H+078B80H = 088444H+0845C0H = 08CA00H = 202由于两个浮点数的阶码分别为8 和7,先将加数的阶码变为8,其尾数右移 1 位。两个数的阶码相同后,尾数直接相加即为和的尾数,和的尾数的最高位为 1,为规格化浮点数。例 2 计算 12.39-93.1解:12.39

7、-93.1 = 04C651H-07BA33H = 87A169H = -80.71本例中被减数小于减数,差为负数,结果的数符为 1。差的阶码为两个数中 较大的阶码。2浮点数乘法运算如果设参加运算的两个操作数分别表示为Na = (-1)SSaxSax2PaNb = (-1)SSb xSbx2Pb它们的积为N = NaxNb=( 1)SSa+SSbx (SaxSb) x2Pa + Pb式中 SSa 和 SSb 为两个数的数符。乘法运算可总结为:(1) 积的数符为乘数的符号位和被乘数的符号位按模2求和,即异或;(2) 积的阶为乘数和被乘数的阶的和;(3) 积的尾数为被乘数和乘数的尾数的积。参加运算

8、的浮点数一般都是规格化的浮点数,尾数的积小于1,不需进行右 规格化处理。但有可能小于 0.5,所以需进行左规格化处理,使积为规格化浮点 数。如果乘数或被乘数的尾为0、则积为4100H。由于在尾数相乘时,积的低16位不能反映在结果中, 因此,积可能会产生一定的误差。例 3 算 22.41x4.23。解:22.41x4.23 = 05B349Hx03875EH = 07BD9AH = 94.8积的阶为乘数和被乘数的和,即8。尾数相乘时,积小于0.5,进行左规格 化处理,阶码变为 7。例 4 计算 2586.5x(6.91)。解:2586.5x( 6.91) = 0CA1BOHx83DD13H =

9、8F8BA0H = -17872被乘数为正数,数符为0,乘数为负数,数符为1,积的数符为01 = 1, 积为负数。3浮点数的除法运算除法运算可以表示为N=NaNb=(-1)SSaxSax2Pa(-1)SSbxSbx2Pb = (-1)SSa-SSbx(Sa/Sb) x2Pa-Pb浮点数的除法运算可以总结为:(1) 商的数符为被除数与除数的符号位的差;(2) 商的阶码为被除数和除数的阶码的差;(3) 商的尾数为被除数和除数的尾数的商。规格化的浮点数进行除法运算时,尾数相除,商不会小于0.5,不需进行左 规格化处理。但有可能大于1,有时需进行右规格化处理。例5 计算 390.67三14.31。解:

10、390.67m14.31 = 09C357Hm04E511H = 05DA4EH = 27.3商的阶码为被除数与除数的阶码的差。尾数相除时,结果的最高位为 1,商 为规格化浮点数。例 6 计算-6.02m16.157。解:-6.02m16.157 = 83C0AAHm058143H = FFBEC8H = -0.373异号相除时,商为负数。由于被除数的尾数大于除数的尾数,所以被除数 先进行右规格化,阶码变为 4,商的阶码为-1,用补码来表示。浮点数运算子程序通过前面的分析可以看到,浮点运算比较复杂,有其特有的方法和规律。 这里介绍几种常用的三字节浮点数运算子程序,通过分析、设计这些程序,可 以

11、进一步了解浮点数的运算过程和特点,熟悉复杂程序的设计方法。1浮点数通用规格化子程序在浮点数运算过程中,有时需要左规格化,有时需要右规格化。通过规格 化子程序既可实现左规格化,又可实现右规格化,其具体功能如下:当 Cy= 0 时,进行右规格化:F0 = 0时.对R6(阶)R2R3(尾数)右规格化1位;F0 = 1时,对R7(阶)R4R5(尾 数)右规格化 1 位。当Cy=1时,对R6(阶)R3(尾数)执行左规格化。程序开始时,判断是执行左规格化还是右规格化。如果是右规格化,还要判断是对R6(阶)R2R3(尾数)还是对R7(阶)R4R5(尾数)进行规格化。如果是左规格 化,直至把操作数变为规格化浮

12、点数。其程序框图如图4-13所示。程序为FSDT:JC LNORMSMOV C, 39H;进行右规格化JB F0, NR7MOV A, R2; R2R3 右移一位RRC A; (Cy)移入尾数最高位MOV R2, AMOV A, R3RRC AMOV R3, AINC R6;阶码加1RETNR7: MOV A, R4RRC AMOV R4, AMOV A, R5RRC AMOV R5, AINC R7RETLNORMS:MOV A, R7JNZ LSHIFTCJNE R3, #00H, LSBIT8;尾数为 0,阶码 41HMOV R6, #41HLSEND :RETLSHIFT:JB ACC

13、.7, LSENDLSBIT8: MOV C, F0MOV A, R3RLC AMOV R3, AMOV A, R2RLC AMOV R2, ACLR F0DEC R6SJMP LNORMS2浮点数加减运算子程序参加运算的浮点数可能是正数,也可能是负数。对于加法运算当加数和 被加数的数符相同时,尾数相加,不同时尾数相减;对于减法运算,当减数和 被减数的数符相同时,尾数相减、不同时尾数相加。当两个浮点数的阶码不同 时,要进行对阶,使小阶与大阶相等,因此,结果的阶码与其较大的阶码相 同。在执行加法运算时,尾数有可能大于 1,因此要进行右规格化处理;执行减 法运算时,尾数有可能小于 0.5,因此,要

14、进行左规格化处理。下面是三字节浮点数加、减法处理于程序,具体功能为:R6(阶)R2R3(尾肚 R7(阶)R4R5(尾)TR4(阶)R2R3(尾);当位3AH=0时,执行加法;当位3AH = 1时,执行减法。程序框图如图 414 所示。程序如下:FABP:MOV A, R6MOV C, ACC.7MOV 38H, C ;存被加数数符XRL A, R7JNB ACC.7, FAB1 ;数符相同则转CPL 3AH ;数符不等,求反运算标志图 4-14FAB1: MOV A, R6MOV C, ACC.6 ;扩展阶码符号位MOV ACC.7, CMOV R6, AMOV A, R7CLRCMOVA,

15、R6SUBBA, R7JZ FAB2 ;阶码相同则转CLRF0JB ACC.7, FAB6CJNER4, #00H, FAB7CJNER5, #00H, FAB7FAB2:JB 3AH, FAB9 ;转向尾数减法MOVA, R3;执行尾数加法ADD A, R5MOV R3, AADD A, R2ADDC A, R4MOV R2, AJNC FAB4SETB 39HCLR CFAB3: CLR F0LCALL FSDTFAB4: CJNE R2, #00H, FAB5CJNE R3, #00H, FAB5MOV R4, #41;结果为 0,规格化RETFAB5: MOV A, R6MOV C, 38HMOV ACC.7, CXCH A, R4MOV R6, ARETFAB6: CJNE R2, #00H, FAB8CJNE R3, #00H, FAB8MOV

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号