我有一种情况,需要用单个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/