c++ - 用一个字节表示一个 float

标签 c++ floating-point

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

我考虑过的表示形式是 3 位指数和 5 位尾数(隐含 1 位),指数以 10 为底,即 x = man * 10^exp.

要将 float 转换为我的迷你 float ,我计划使用 frexp,并使用一些数学运算将基数 2 转换为基数 10。

这是明智的做法吗?或者有更好的方法来实现这一目标吗?

最佳答案

您是否真的需要该值是 float (即随着值的缩放具有大致恒定的精度)?您将如何处理这些值?

一个更简单(也更有效)的想法是将 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
}

关于c++ - 用一个字节表示一个 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11935030/

相关文章:

c++ - 如何打印 BST 中特定范围之间的数字,从最高到最低,访问的节点最少?

c++ - 如何停止在共享库中实现的阻塞 pthread_join()

python - 找到将 float 列表转换为整数列表的公因数

python - 更改 float 的精度并在 Python 中存储

c++ - 未找到 assimp-vc140-mt.dll ASSIMP

c++ - 在模板类中重载加法运算符

c++ - 在 C++ 中确定是 Linux 还是 Windows

在 c#define 中将 float 转换为 unsigned long 以访问 float 内部结构

c++ - 浮点位和严格的别名

javascript - 在javascript中在 double 和浮点精度之间转换