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