我有一个单精度浮点值,没有关于生成此值的样本分布的信息,所以我不能应用sigmoid或执行某种规范化。此外,我知道价值总是非负的。将此浮点数表示为字节的最佳方法是什么?
我想到了以下几点:
将float解释为UInt32(我希望这能保持数字之间的相对排序,如果我错了请纠正我)然后将其缩放到一个字节的范围。
UInt32 uVal = BitConverter.ToUInt32(BitConverter.GetBytes(fVal), 0);
byte bVal = Convert.ToByte(uVal * Byte.MaxValue / UInt32.MaxValue);
感谢您的评论和任何其他建议。谢谢!
答案 0 :(得分:0)
您必须承担分发。你没有选择。不知何故,您必须对浮点值进行分区并将它们分配给字节值。
如果假设分布是线性算术,则空间大致为0到3.4e38。字节值中的每个增量的权重约为+ 1.3e36。
如果假设分布是线性几何,则空间大约为2.3e83。字节值中的每个增量的权重约为x2.1。
您可以通过简单的算术推导出这些值。第一个是maxfloat / 256。第二个是(maxfloat / minfloat)的第256个根。
您使用和缩放原始位模式的建议将产生一个块状分布,其中具有不同指数的数字被组合在一起,而具有相同指数和不同尾数的数字被分开。我不会在大多数情况下推荐它。
-
一种非常简单的方法可能只是使用8位指数(掩码0x7f80),忽略符号位和尾数。必须特别处理00和ff的值。请参阅http://en.wikipedia.org/wiki/Single-precision_floating-point_format。