4

(ubyte 是无符号字符)

在例如颜色类中为 RGB 值使用浮点值有什么意义?它是否提供更高的准确性?空间呢?使用 float 与 ubyte 的性能优势/障碍是什么?

4

2 回答 2

4

临:

  • 做数学时不需要转换为浮点数
  • 当按顺序应用多个处理步骤时,更准确地保留中间值
  • 具有更大的动态范围和分辨率
  • float 是 GPU 等的自然格式

缺点:

  • 需要更多存储空间
于 2012-12-24T14:35:45.243 回答
3

在所有可能的情况下,它确实提供了更高的精度。如另一个答案中所述,不必来回转换也有好处,这反过来又会导致丢失中间结果 - 假设您有一个浮点数为 1.0(一个字节为 255)的像素,并且你乘以 0.65。然后将其转换回整数,即 166.75 - 但我们向下舍入到 166。所以我们失去了 0.75。如果我们做一些进一步的数学运算,错误可能会变得更大......当然,如果某个中间步骤导致我们的值(方式)超过 255(1.0)或低于 0(0.0),则完全有可能保留新的值一段时间,然后在需要时“修复它”。

当然,您不能(通常)在更小的空间中存储更多数据,因此典型的浮点数是字节的 4 倍。一些 GPU 具有 16 位浮点数,其中包含 11 位尾数和 4-5 位指数,这使得它们适用于大多数类型的简单像素数学。但它仍然是大小的两倍,但不是“精确度”的两倍(我的一位同事花了很多时间试图获得一个使用 16 位浮点数的算法来匹配 32 位浮点数的结果,但从未完全实现) .

于 2012-12-24T14:50:12.343 回答