0

我有一个单精度浮点值,并且没有关于生成该值的样本分布的信息,因此我无法应用 sigmoid 或执行某种归一化。另外,我知道该值将始终为非负数。将此浮点数表示为字节的最佳方法是什么?

我想到了以下几点:

将浮点数解释为 UInt32(我希望这能保持数字之间的相对顺序,如果我错了,请纠正我),然后将其缩放到一个字节的范围。

UInt32 uVal = BitConverter.ToUInt32(BitConverter.GetBytes(fVal), 0);
byte bVal = Convert.ToByte(uVal * Byte.MaxValue / UInt32.MaxValue);

感谢您的意见和任何其他建议。谢谢!

4

1 回答 1

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

于 2014-04-02T03:21:37.020 回答