[51单片机] float精度瓶颈怎么解决?

[复制链接]
 楼主| 人生长苦 发表于 2020-12-12 14:53 来自手机 | 显示全部楼层 |阅读模式
用8位机做导航定向,只支持32位float,板子功能就是输入目的地经纬度,再根据板子获取的实时gps经纬度来指示行进方向和距离。float六位有有效数字满足不了经纬度计算啊,有什么好的办法解决?
 楼主| 人生长苦 发表于 2020-12-12 15:05 来自手机 | 显示全部楼层
目前是把所在点简化为一个平面,算出每经度固定一个距离和每纬度固定一个距离,此方法在几十千米范围内精度还行。
MagicSquare834 发表于 2020-12-12 15:12 | 显示全部楼层
换32位机
Diyer123 发表于 2020-12-12 16:47 | 显示全部楼层
支持不了double,可以用模拟笔算
William1994 发表于 2020-12-13 12:54 | 显示全部楼层
32位机用float也有一模一样的问题。
你应该用个64位整数来存(8个char组成的结构体),自己做个64位整数的加法运算和减法运算函数库。
比较麻烦的是printf不支持,需要做个转十进制string的函数。

还有看看32位定点数能到8个有效数字,看看能不能满足你的需求。
caoenq 发表于 2020-12-17 14:42 | 显示全部楼层
float型应该是共有8位有效,去除一位符号位,还有7位有效数字,一般的应用足够。
广东梁百万 发表于 2020-12-17 15:09 来自手机 | 显示全部楼层
如果是业余玩玩的那只有张就下,如果是做产品销售的话那你就只有自己动手去编双精度函数库
 楼主| 人生长苦 发表于 2020-12-17 22:15 | 显示全部楼层
广东梁百万 发表于 2020-12-17 15:09
如果是业余玩玩的那只有张就下,如果是做产品销售的话那你就只有自己动手去编双精度函数库 ...

自己玩,给自己摩托车上做个导航仪,用一个舵机实时指示目的地方位,四位数码管显示直线距离,float精度可以了,测试相距十几米也能准确定向。
ayb_ice 发表于 2020-12-18 08:27 | 显示全部楼层
度分秒分别用不同的变量保存不可以吗,分别比较,GPS输出的不就是这些吗
这与年月日时分秒不一样的吗
airwill 发表于 2020-12-19 15:26 | 显示全部楼层
经纬度数据, 只在 ±180 范围內,  可以考虑用定点数,  仍然是32位数, 精度提高好多倍呢
tianxj01 发表于 2020-12-19 15:37 | 显示全部楼层
用定点数吧,虽然大家还是32位,那绝对精度可就不是一个概念。
 楼主| 人生长苦 发表于 2020-12-19 15:50 | 显示全部楼层
tianxj01 发表于 2020-12-19 15:37
用定点数吧,虽然大家还是32位,那绝对精度可就不是一个概念。

要算三角函数
 楼主| 人生长苦 发表于 2020-12-19 15:50 | 显示全部楼层
ayb_ice 发表于 2020-12-18 08:27
度分秒分别用不同的变量保存不可以吗,分别比较,GPS输出的不就是这些吗
这与年月日时分秒不一样的吗
...

主要是需要算三角函数
tianxj01 发表于 2020-12-19 15:59 | 显示全部楼层

用泰勒展开式求解,迭代20次精度能吓死你。
公式动动脑筋,用定点计算还是很方便的。
ayb_ice 发表于 2020-12-21 11:01 | 显示全部楼层
人生长苦 发表于 2020-12-19 15:50
主要是需要算三角函数

可以用浮点数分别算出度分秒,这样精度可以保证的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

50

主题

217

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部

50

主题

217

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部