在double为4字节的单片机上,将gps值转成8字节double数据,尽可能地保留精度

该博客介绍了如何在只支持4字节double的单片机环境下,将GPS值(dddmm.mmmmm)转换为8字节double类型,以尽可能保留精度。通过分解GPS值,进行浮点数转换、除法运算和指数调整等步骤,实现转换过程。
摘要由CSDN通过智能技术生成

void gpsValueStrToByte(uint8_t* bytes, char* gpsValueStr)

{

    /*

        在double为4字节的单片机上,将gps值转成8字节double数据,尽可能地保留精度

        float:   0   1-8     9-31

             符号位  指数+127  尾数位    (尾数部分省略小数点前面的 1 )

        double:  0   1-11       12-63

             符号位  指数+1023  尾数位    (尾数部分省略小数点前面的 1 )

        gps数据格式  dddmm.mmmmm     d 表示度数位,m 为分数位 转换成度数对应的8字节又精度数:ddd+(mm.mmmmm/60.0)

        转换思路:

            1. 将gps数据分解为:度数整数部分ddd, 分数整数部分mm, 分数小数部分+1.0: 1.mmmmm 分别保存

                (加1.0的目的是为了保证尾数部分在后续计算中可以直接使用,因为1恰好是被省略的那一位)

            2. 将分值部分的整数部分和小数部分拼装并调整指数8字节double形式

            3. 执行分值部分除以60.0操作,(1/60.0的指数为-6,尾数部分二进制大概为:1.000100010001000100010001000100010001000100010001000 采用右移相加的方法执行双精度除法)

            4. 上一步结果得到的度数的小数部分值+1.0得到

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值