在单片机的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用这种格局的浮点数表明便是:
000010111001101001011000
用十六进制表明为:
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。
浮点数在运算之前和运算之后都要进行规格化,规格化进程包含以下过程:
首要判别尾是否为0,假如为0,规格化成果为410000H;
(果尾数不为0,判别层数的最高位是否为1,假如不为1,尾数左移,阶码减1。)
再判别层数的最高位是否为1,假如不为1,继续进行规格化操作,假如为1,则规格化完毕。
经过以上的文章可以看到,浮点数结构有着较为显着的运用场景。在需求处理的数据规模较大或许关于数据的恳求规模较高时,合适运用单片机浮点数来进行运算。浮点数可以使用本身固定的字节长度来坚持相对精度。规划者可根据自己不同的需求来进行挑选,期望我们在阅读过本文之后可以有所收成。