(ubyte 是无符号字符)
在例如颜色类中为 RGB 值使用浮点值有什么意义?它是否提供更高的准确性?空间呢?使用 float 与 ubyte 的性能优势/障碍是什么?
临:
缺点:
在所有可能的情况下,它确实提供了更高的精度。如另一个答案中所述,不必来回转换也有好处,这反过来又会导致丢失中间结果 - 假设您有一个浮点数为 1.0(一个字节为 255)的像素,并且你乘以 0.65。然后将其转换回整数,即 166.75 - 但我们向下舍入到 166。所以我们失去了 0.75。如果我们做一些进一步的数学运算,错误可能会变得更大......当然,如果某个中间步骤导致我们的值(方式)超过 255(1.0)或低于 0(0.0),则完全有可能保留新的值一段时间,然后在需要时“修复它”。
当然,您不能(通常)在更小的空间中存储更多数据,因此典型的浮点数是字节的 4 倍。一些 GPU 具有 16 位浮点数,其中包含 11 位尾数和 4-5 位指数,这使得它们适用于大多数类型的简单像素数学。但它仍然是大小的两倍,但不是“精确度”的两倍(我的一位同事花了很多时间试图获得一个使用 16 位浮点数的算法来匹配 32 位浮点数的结果,但从未完全实现) .