gpt4 book ai didi

floating-point - 将浮点范围转换/量化为整数范围

转载 作者:行者123 更新时间:2023-12-04 06:13:48 24 4
gpt4 key购买 nike

假设我的浮点数在[0,1]范围内,我想对其进行量化并将其存储在一个无符号字节中。听起来很容易,但实际上很复杂:

显而易见的解决方案如下所示:

unsigned char QuantizeFloat(float a)
{
return (unsigned char)(a * 255.0f);
}

到目前为止,我可以使用所有从0到255的数字,但是整数的分布并不均匀。如果a恰好是 255,则该函数仅返回 1.0f。不是一个好的解决方案。

如果我进行适当的四舍五入,我只会解决问题:
unsigned char QuantizeFloat(float a)
{
return (unsigned char)(a * 255.0f + 0.5f);
}

在这里,结果 0仅覆盖浮点范围的一半,而不是任何其他数字。

如何在浮点范围的均等分布下进行量化?理想情况下,如果我对相等分布的随机浮点数进行量化,则希望获得整数的相等分布。

有任何想法吗?

顺便说一句:我的代码也是用C语言编写的,与语言无关。对于非C语言人员:只需假设 floatint的转换会截断浮点数。

编辑:由于我们在这里有些困惑:我需要一个映射,将最小的输入float(0)映射到最小的无符号字符,将我范围内的最高float(1.0f)映射到最高的无符号字节(255)。

最佳答案

带有检查将a * 256f减少为256到255怎么样?所以像这样:

return (unsigned char) (min(255, (int) (a * 256f)));

(对于您平台上合适的min函数-我不记得它的C函数。)

基本上,您希望将范围分为256个相等的部分,这是应该做的。 1.0的边缘情况要达到256,并且需要四舍五入,这仅仅是因为域的两端都是包容性的。

关于floating-point - 将浮点范围转换/量化为整数范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/599976/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com