c – 在单个字节中表示浮点数

我有一种情况需要浮点数在一个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
}

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...