将浮点数量化为字节的最佳方法是什么

本文关键字:最佳 方法 是什么 字节 数量化 | 更新日期: 2023-09-27 17:56:17

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

我想到了以下几点:

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

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

感谢您的评论和任何其他建议。谢谢!

将浮点数量化为字节的最佳方法是什么

你必须假设一个分布。你别无选择。不知何故,您必须对浮点值进行分区并将它们分配给字节值。

如果假设分布是线性算术的,则空间大致为 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。