假设我有一个 [0, 1] 范围内的浮点数,我想量化它并将其存储在一个无符号字节中。听起来很简单,但实际上它相当复杂:
显而易见的解决方案如下所示:
unsigned char QuantizeFloat(float a)
{
return (unsigned char)(a * 255.0f);
}
到目前为止,这有效,我得到了从 0 到 255 的所有数字,但整数的分布并不均匀。该函数仅255
在 a 恰好为时返回1.0f
。不是一个好的解决方案。
如果我进行适当的舍入,我只是转移问题:
unsigned char QuantizeFloat(float a)
{
return (unsigned char)(a * 255.0f + 0.5f);
}
这里的结果0
只覆盖了浮动范围的一半,而不是任何其他数字。
如何进行浮点范围均匀分布的量化?理想情况下,如果我量化均匀分布的随机浮点数,我希望得到整数的均匀分布。
有任何想法吗?
顺便说一句:我的代码也在 C 中,问题与语言无关。对于非 C 语言的人:假设float
转换会int
截断浮点数。
编辑:因为我们在这里有些困惑:我需要一个映射,将最小的输入浮点数(0)映射到最小的无符号字符,并将我范围的最高浮点数(1.0f)映射到最高的无符号字节(255)。