stm32中的浮点数

您所在的位置:网站首页 浮点数精确吗 stm32中的浮点数

stm32中的浮点数

2024-07-09 07:44| 来源: 网络整理| 查看: 265

1. 浮点数原理简介 1.1 IEEE浮点表示 IEEE浮点标准用V=(-1)^s * M * 2^E的形式来表示一个数:符号(sign) s是符号位,1表示负,0表示正阶码(exponent) E的作用是对浮点数加权,这个权重是2的E次幂,取值范围(单精度-128~127,双精度-1024~1023)尾数(significand) M是一个二进制小数,它的范围是1~2-ε,或者是0~1-ε

 规格化数:阶码的位不全为0也不全为1;此时尾数 M >= 1,它隐含着一个1; 非规格化数:阶码的位全为0;此时尾数0 = x+b。无符号数或补码不具有这个属性。浮点数乘法在加法上不支持分配性: 例如1e20*(1e20-1e20)=0.0; 而1e201e20-1e201e20会得出NaN。浮点数乘法支持单调性,同样无符合或补码不支持单调性属性。 1.5 浮点数有效位数

参考C语言浮点数运算_ifreecoding_新浪博客

c语言头文件中定义是6位有效位数;c语言书籍中有6~7位的说法;根据参考里面的推理得出float型能精确地表示6位小数,超过6位小数就有些数不能表示了;如下图

由上图可以看出,float型不能表示1.0000006这个数。而对于很大的数1234567890,它的二进制是0x4E932C06,实际的浮点数值是1234567936,也是高7位对得上。所以6位有效位数是比较精确的一个定义。

2. 浮点数使用注意事项 2.1 浮点数不能直接用等于号做比较

错误示例:

void func(float d1, float d2) { if(d1 == d2) { ; } }

正确示例:

#define LIMIT 1.0e-4 void func(float d1, float d2) { float diff = d1-d2; if(-LIMIT


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3