首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用整数表示浮点数

使用整数表示浮点数
EN

Stack Overflow用户
提问于 2016-08-30 00:20:11
回答 1查看 458关注 0票数 3

BLE数据包的限制大小为20个字节。我需要通过它传输以下数据:

代码语言:javascript
复制
struct Data {
  uint16_t top;
  uint16_t bottom;
  float accX;
  float accY;
  float accZ;
  float qx;
  float qy;
  float qz;
  float qw;
};

数据大小为32字节。浮标的精度不能牺牲,因为它们代表加速度计和四元数,如果不能精确表示,将产生巨大的漂移误差(数据将随着时间的推移而集成)。

我也不想发送两个数据包,因为同时接收整个数据是非常重要的。

我打算利用这个范围来代替。

  • 加速度计是IEEE浮动在- 10,10的范围内。
  • 四元数是IEEE浮动在- 1,1的范围内。我们可以去掉w,例如x^2 + y^2 + z^2 + w^2 =1。
  • 顶部和底部各10位。

了解这些信息后,如何使用最多20个字节来序列化数据?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-30 03:25:38

假设binary32,代码使用2*16 + 7*32位(256位),OP希望限制在20*8位(160位)。

一些节省:

1) 10位uint16_t

2)缩小的指数范围为每float节省一位或2位--如果OP也表示_minimum指数,将节省更多的位数。(估计4双边投资条约共计)

3)不编码w

这使得2*10 + 6*(32-4) = 188位,但仍未降至160位。

OP说“不能牺牲浮标的精度”,这意味着需要24位(23位显式编码)的意义。7 float * 23位是161位,这不包括符号、指数或2 uint16_t

因此,除非可以消除某些模式或冗余信息,否则OP是不走运的。

建议使用许多data样本,并尝试使用LZ或其他压缩技术对其进行压缩。如果OP的平均data值明显少于20个字节,那么答案是肯定的--理论上说,否则就是索尔

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39217065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档