我有一种情况需要浮点数在一个char中表示.这个’minifloat’需要表示的范围是0到10e-7,所以我们总是可以假设数字是ve,而指数是-ve以节省空间.
我考虑过的表示是3位指数和5位尾数(带有1个隐含位),指数在基数10中,即x = man * 10 ^ exp.
要从float转换为我的minifloat,我打算使用frexp,并使用一些数学从base 2转换为base 10.
这是一种明智的做法吗?或者有更好的方法来实现这一目标吗?
解决方法
你真的需要将值作为浮点数(即随着值的缩放而具有大致恒定的精度)吗?你打算怎么处理这些价值观?
更简单(也更有效)的想法是将8位解释为无符号定点数,隐式标度为1e-7.即:
float toFloat(uint8_t x) { return x / 255.0e7; } uint8_t fromFloat(float x) { if (x < 0) return 0; if (x > 1e-7) return 255; return 255.0e7 * x; // this truncates; add 0.5 to round instead }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。