首页 > 编程知识 正文

单片机一般用什么语言编程,c语言双精度浮点数怎么表示

时间:2023-05-06 15:20:43 阅读:153745 作者:4845

C51以4个字节存储浮点数,格式符合IEEE-754标准。 详情请参照c51.pdf179页的说明。 一

每个浮点数由两个部分表示,尾数和2的幂表示浮点数上的实际二进制数,2的幂表示手指

数字、指数的保存格式为0到255的8位数,指数的实际值为保存值(0到255 )减去127

- 127到128之间的值。 尾数是24位值,表示约7个十进制数。 最高级别的MSB通常是

1 )因此不予保存。 符号位表示浮点数为正或负。

浮点数以以下格式保存:

地址0 1 2 3

内容seeeeeeemmmmmmmmmmmmmmmmmmm

就是这里

s表示符号位,1表示负,0表示正

e偏移127的幂,二进制码=(EEEEEEEE )-127。

M 24位的尾数存储在23位中,仅存储23位,最高有效位固定为1。 这个方法用最少的位数实现了

通过高有效位数提高了精度。

零是特定的值,乘方为0,尾数也为0。

浮点数-12.5作为十六进制0xC1480000存储在存储区中。 该值如下:

地址0 1 2 3

内容0xC10x480x000x00

浮点数和十六进制等价保存值的转换相当简单。 以下示例说明上面的值-12.5如何旋转

交换。

浮点保存值不是直接格式,要转换为浮点数,必须将格式表保存为位在上的浮点数

像清单一样分开。 例如:

地址0 1 2 3

格式seeeeeeeeemmmmmmmmmmmmmmmmmmmmm

二进制1100000010100100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

十六进制C1 48 00 00

可以从此示例中获得以下信息:

符号1表示负数

乘方是二进制10000010或十进制130,130减去127等于3,是实际乘方。

尾数是后面的二进制数10010000000000000000

尾数的左侧省略了小数点和1。 保存浮点数时经常省略此1,并添加1和小数

到尾数的开头为止,末尾的值为以下:

1.100100000000000

然后,根据指数调整尾数。 负指数将小数点向左移动。 正指数向右移动小数点。 因为

指数为3,舍入调整为:

100.10000000000

结果是二进制浮点数,小数点左边的二进制数表示位置的2的幂。 例如,1100表示如下

(1*2^3)1*2^2)0*2^1)0*2^0)=12。

小数点右边也表示位置的2的幂,只有幂是负的。 例如, 100 .表示(1*2^ ) (-1 ) )

(0*2^(-2 ) )0*2^ ) )=0.5。

这些值之和是12.5。 由于设定的符号位表示该数为负,因此十六进制值0xC1480000为-

十二点五。

浮点数错误消息

8051不包含捕获浮点数错误的中断向量,因此软件必须正确应对这些错误

情况。

除了普通浮点值外,还包括二进制错误值。 这些值被定义为IEEE标准的一部分,并与配合使用

正常浮点数操作期间发生错误时。 请检查您的代码可能会在每次浮点操作完成时出现

当前错误。

名字的意思

NaN0xFFFFFFF不是数

INF0x7F80000正无限(正溢出) ) ) ) ) ) ) ) ) ) ) )。

-INF0xFF80000负无限(负溢出) ) ) ) ) ) ) ) ) ) ) ) ) ) )。

可以使用以下联合(union )存储浮点数:

union f {

float f; //浮点值

无符号龙; //无符号长整数

(;

此union包含浮点和无符号长整型,用于执行浮点数**计算并响应IEEE错误

状态。

以上是KEIL在线帮助的中文翻译。 介绍浮点数的显示方法。

尾数为24位,最高可表示的整数值为2^24-1=16777215,即16777215以下

的整数,来定义您自己的自订外观。 这决定了十进制浮点数的有效位数为7位,10^716777215

<10^8,

10的7次方以内的数小于16777215,可以精确表示。使用科学记数法时,整数部分占1位,所

以小数部分最大占7-1=6位,即最大有6位十进制精度。

长整形数和浮点数都占4字节,但表示范围差别很大。浮点数的范围为+-1.175494E-38

到+-3.402823E+38,无符号长整形数范围为0到4294967295。显示浮点数要用到长整形数保

存数据,可他们范围差这么多,怎么办呢?

仔细观察十进制浮点数的显示,有一个尾数和一个阶码,由上面论证可知32位IEEE-754

浮点数最大有效数字为7位十进制数,超出此范围的数字有截断误差,不必理会,因此,浮

点数尾数能够放在长整形数里保存。阶码为-38到38,一个char型变量就可以保存。

综上所述,以10^7的最大跨度为窗口(小于10^7也可以,如:10,100...10000等,但决

不能大于它,那样会超出精度范围),定位浮点数的量级,然后取出7位尾数的整数值存于长

整形数里,再调整阶码,就可以精确显示此浮点数。

量级尺度如下:

(-38)-(-35)-(-28)-(-21)-(-14)-(-7)-(0)-(7)-(14)-(21)-(28)-(35)-(38)

请严格按照KEIL手册给出的浮点数范围显示,因为数值空间没有完全使用,有些值用于

错误指示和表示正负无穷。小于1.175494E-38的数仍可以显示一些,但最好不用,以免出

错。我采用直接判断的方法,剔除此种情况。

在计算机里结合律不成立,(a*b)*c!=a*(b*c),原则是先让计算结果值动态范围小的两

个数运算,请注意程序里的写法。

注:(1E38/b)*1E6不要写成1E44/b,因为无法在32位浮点数里保存1E44,切记!

计算机使用二进制数计算,能有效利用电子器件高速开关的特性,而人习惯于十进制数

表示,二进制和十进制没有方便的转换方法,只能通过大量计算实现,浮点数的十进制科学

记数法显示尤其需要大量的运算,可见,显示一个浮点数要经过若干次浮点运算,没有必要

就不要显示,否则,花在显示上的时间比计算的耗时都要多得多。

笔记:

1、浮点数同样有存储范围的问题,注意幂次。

2、在一定的误差范围内,即可认为两个浮点数相等。

2、浮点数有舍入误差,运算需要严格注意次序,避免精度下降。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。