IEEE-754 浮点数的格式以及通讯

2025-11-18 05:09:47

1、为什么说单精度float 浮点数的精度只有7位 ?

这个解释起来轻松一点,精度这里指的是最大有效数字的位数,即只需要考虑尾数部分就可以啦。

对于float类型,尾数部分是23,转换成10进制的精度,223=10x223=10x –> x=23log2≈6.92  x=23log2≈6.92,所以23位2进制最多只能表示6位10进制数,这里就是头文件中FLT_DIG=6的来由。 

但还有一种说法,也是网上的主流说法,二进制小数点的第一位永远都是1,可以省略,实际上二进制的精度为24,所以10进制的精度为7。

单精度浮点数所能表示数据的范围:以传统的32位为依据  不是IEEE754 的指数形式。

指数位 占用 8位 (包含一位符号位) 尾数部分 占用24位(包含一位符号位)

IEEE-754 浮点数的格式以及通讯

2、浮点数IEEE754标准的表示法:

IEEE754规定:

(1)单精度浮点数字长32位,尾数长度23,指数长度8,指数偏移量127;双精度浮点数字长64位,尾数长度52,指数长度11,指数偏移量1023;

(2)约定小数点左边隐含有一位,通常这位数是1,所以上述单精度尾数长度实际为24(默认省略小数点左边的1则为23),双精度尾数长度实际为53(默认省略小数点左边的1则为53)

IEEE-754 浮点数的格式以及通讯

IEEE-754 浮点数的格式以及通讯

3、例子2

把23.7度用IEEE-754 表示出来  

23对应的二进制为 10111

十进制0.7 对应的小数部分为:

IEEE-754 浮点数的格式以及通讯

4、观察到用二进制表示十进制小数0.7 出现了 循环 

十进制的23.7度用二进制表示

10111.10110 0110 0110 0110 0110 0110 0110 0110 

把上面的数表示成规范化小数形式

1.0111 1011 0011 0011 0011 001 

故23位的尾数为

0111 1011 0011 0011 0011 001 

指数为4  加上偏移量127  为131  对应 1000 0011 

IEEE-754 浮点数的格式以及通讯

5、对应的16进制为 41BD 9999 

我用多路温度测试仪器  用485接口读取 触点1的温度, 当温度 显示 23.7时 

我用串口监控器读取上来的数据为 01 04 04  41 BD 99 9A  95  A7   95 A7是MODBUS CRC16 的校验码。

当多路温度测温仪显示的温度为24摄氏度的时候,我用串口监控器读取的数据为

01 04 04 41  C0  00  00    EF 84    EF 84 为Modbus crc16 的校验码

现在开始 把IEEE-754 表示的数 翻译成十进制的小数

0100 0001 1100 0000 0000 0000 0000 0000

上面的绿色为指数部分  100 00011 对应十进制的131  减去偏移量127 等于 4

小数部分 加上省略的1  应该为

1.100 0000 0000 0000 0000

乘以指数4以后 变为

11000.0000 0000 0000  

IEEE-754 浮点数的格式以及通讯

IEEE-754 浮点数的格式以及通讯

6、用多路温度探测仪器 检测的温度 如下:然后经检测的温度通过485 modbus 协议 上传上来 显示 

IEEE-754 浮点数的格式以及通讯

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢