Dan*_*ter 4 floating-point integer rounding
我在这个问题上读到了舍入技术。 将颜色值从浮点 0..1 转换为字节 0..255
您有一个 0 到 1 范围内的浮点数,并且希望将其映射到 0-255 的字节整数范围。因此,您将 0-1 数字乘以 255f,然后将该数字转换为字节。因为所有转换只是对浮点数的小数部分进行取整,所以您需要一种方法来实现它,以便在取整时它将达到所需的舍入结果。
我的想法是在转换为字节之前添加0.5f。
但是,我在链接的页面上注意到了一些我不理解的新内容。他将 0-1 映射到 256,这会以某种方式实现四舍五入的结果。
我测试了一些值,看看它是否有效,而且看起来确实有效。我只是不明白为什么。有人能给我证明吗?
这是Fencepost 错误的一个特例。最简单的解释可以在只有两种颜色(黑色和白色)的情况下看到。因此很容易看出必须将区间 0-1 除以二。
这可以通过将间隔乘以稍少的数进行除法并截断结果来轻松实现。这也是随机数生成器返回 >= 0 且 < 1.0 的值以便以相等概率轻松获得值的原因。
因此,在此示例中,您将得到正确的结果 value = Floorf(1.9999*x)。
问题是,虽然颜色索引以数字 1 结尾,但实际上有两种颜色(0 和 1),因此间隔必须除以 2。对于 256 种颜色 (0-255),您需要除以数字 256。人们可能会注意到 0 也是一个有效值,必须正确映射。