首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >表示单字节中的浮点数

表示单字节中的浮点数
EN

Stack Overflow用户
提问于 2012-08-13 21:16:49
回答 4查看 6.8K关注 0票数 7

我有一种情况,需要在单个char中表示一个float。这个'minifloat‘需要表示的范围是0到10e-7,所以为了节省空间,我们总是可以假设这个数字是+ve,指数是-ve。

我考虑的表示是3位指数和5位尾数(带有1个隐含位),指数是以10为基数的,即x = man * 10^exp

为了将浮点数转换为我的微型浮点数,我计划使用frexp,并使用一些数学方法将基数2转换为基数10。

这是一种明智的方法吗?或者有没有更好的方法来实现这一点?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-08-13 21:29:02

你真的需要值是浮点型的吗(也就是说,在值缩放时要有大致恒定的精度)?您将如何处理这些值?

一个更简单(也更有效)的想法是将8位解释为隐含小数位数为1e-7的无符号定点数。即:

代码语言:javascript
复制
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
}
票数 9
EN

Stack Overflow用户

发布于 2012-08-13 21:25:10

如果它满足您的目的,则合理地使用这种格式作为存储或传输格式,即在较小的空间中记录数据。您应该验证此格式的舍入误差不会太大,以满足您的需求,范围是否合适等等。

这不是一个好的计算格式,因为它在正常的硬件上会很慢。

我不明白你会做什么基础转换。如果您在float中有一个IEEE-754浮点数,那么转换为8位格式或从8位格式转换为8位格式的工作就是在转换为较窄格式时对有效数(分数)进行舍入,以及调整指数偏差,以及处理特殊情况(反规格化、溢出、NaNs)。这将只涉及二进制算术,而不是十进制。

另外,请注意浮点数的小数部分的适当术语是“小数”或“有效数”( IEEE-754标准中使用的术语)。“尾数”是对数的小数部分。

票数 4
EN

Stack Overflow用户

发布于 2012-08-13 22:49:26

另一种方法是使用256个浮点数(或双精度)的静态数组,您可以根据自己的标准进行选择。

则转换无符号字符->浮点数/双精度数是微不足道的……

浮点/双精度->无符号字符的转换稍微复杂一些(在静态数组中查找最近的浮点数);与简单的二进制搜索算法进行比较需要大约8次比较,但根据您在静态数组中选择值的方式,您可能会发现更好。

当然,操作将使用本机float/double执行。

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

https://stackoverflow.com/questions/11935030

复制
相关文章

相似问题

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