我有一种情况,需要用单个float表示char。这个“最小浮点数”需要表示的范围是0到10e-7,因此为了节省空间,我们总是可以假设数字为+ ve,指数为-ve。

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

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

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

最佳答案

您实际上是否需要将该值作为浮点数(即,随着该值的缩放而具有大致恒定的精度)?您将如何处理这些值?

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

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++ - 在一个字节中表示一个浮点数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11935030/

10-13 08:22