需要计算两个GPS坐标之间的距离,但是单片机keil又不支持double,各大老是如何解决的。

[复制链接]
1459|13
手机看帖
扫描二维码
随时随地手机跟帖
oufuqiang|  楼主 | 2024-12-27 09:59 | 显示全部楼层 |阅读模式
William1994| | 2024-12-28 10:31 | 显示全部楼层
第一步, 定义一个数组,长度是10个字节。
第二步,对齐小数点
第三步,从低位到高位挨个进行减法,不足的借位。
实际计算速度比浮点数还快,浮点数还要归一化,移动小数点的位置,不停的移位。

使用特权

评论回复
William1994| | 2024-12-28 10:31 | 显示全部楼层
本帖最后由 William1994 于 2024-12-28 10:32 编辑

21ic点两次发送,就发重复了。能不能点了发送之后三秒内不让点第二次啊。

使用特权

评论回复
oufuqiang|  楼主 | 2024-12-28 21:25 | 显示全部楼层
William1994 发表于 2024-12-28 10:31
第一步, 定义一个数组,长度是10个字节。
第二步,对齐小数点
第三步,从低位到高位挨个进行减法,不足的借 ...

这是模拟手搓竖式减法啊,我试试吧,没有其他办法也只能自己码了。

但是后面算距离的时候还是要平方开方的,这个就不好手搓了。

使用特权

评论回复
前功尽弃| | 2024-12-30 10:18 | 显示全部楼层
用IQ库试试

使用特权

评论回复
xzy568| | 2024-12-30 13:10 | 显示全部楼层
能否先当成整数来计算?算好后再把小数点移回来

使用特权

评论回复
Ketose| | 2024-12-30 14:29 | 显示全部楼层
什么单片机?51单片机吗?

使用特权

评论回复
William1994| | 2025-1-5 09:47 | 显示全部楼层
oufuqiang 发表于 2024-12-28 21:25
这是模拟手搓竖式减法啊,我试试吧,没有其他办法也只能自己码了。

但是后面算距离的时候还是要平方开方 ...

化简成  2.5 * 10^9 这个格式, 2.5 用float 存,9 用int来存。10开根号是固定的3.16。
sqrt(2.5E9) = sqrt(2.5)*sqrt(10)*sqrt(1E8) = sqrt(2.5)*3.16*1E4

使用特权

评论回复
评论
William1994 2025-1-5 09:49 回复TA
适合最后一步,有效位数要求不高的运算。 
oufuqiang|  楼主 | 2025-1-6 20:36 | 显示全部楼层
William1994 发表于 2025-1-5 09:47
化简成  2.5 * 10^9 这个格式, 2.5 用float 存,9 用int来存。10开根号是固定的3.16。
sqrt(2.5E9) = sq ...

果然是大佬,想法就是不一样,这种思路我怎么从来没想到过。

使用特权

评论回复
jackyhuang1988| | 2025-1-7 16:42 | 显示全部楼层
keil怎么会不支持double??

使用特权

评论回复
William1994| | 2025-1-10 08:56 | 显示全部楼层
jackyhuang1988 发表于 2025-1-7 16:42
keil怎么会不支持double??

Keil C51的double会编译成float。
以前电赛的时候老师都是让我们做三字节(2字节底数,一字节指数)的浮点库,做FFT的时候能快。
double的话要自定义类型,自己做函数库,现在java和c# 流行用bigint类,也就是一个大数组, 手搓加减乘除四则运算。很多时候运行库自带的64bit的double和80bit的extend都不够用的。
反倒是c++的半精度浮点数, 在嵌入式场合远比单精度和双精度有意义。我加热个温度,怎么可能需要万分之一的精度? 怎么可能需要正负一百万的范围?现在AI使用的单词之前的权重,半精度也非常合适。

我上面提的开根号的有效位数其实也不高,只能用在最后面的几个步骤的运算上。估计楼主也不是手搓double的汇编浮点库的人,二姨家的邓苗和老hot大叔等老一辈的8051汇编高手基本都退休了,剩我这种能手写汇编,偶尔把别人汇编转c语言(一天可以2KB的flash)的人也慢慢的很少了。回帖都只能捡最简单的办法来回复。

使用特权

评论回复
xzy568| | 2025-1-10 13:16 | 显示全部楼层
William1994 发表于 2025-1-10 08:56
Keil C51的double会编译成float。
以前电赛的时候老师都是让我们做三字节(2字节底数,一字节指数)的浮 ...

请教一下,如果用整数运算,最后结果再算出小数点的位置,会有什么问题?

使用特权

评论回复
zhxzhxzzhhxx| | 2025-1-10 14:37 | 显示全部楼层
其实 用 float 精度也是可以的,我试过大约能分辨5米的距离,长距离一点点误差更不用管了,再短的距离,GPS的稳定性又不够

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

107

主题

1437

帖子

20

粉丝