(ubyte是未签名的char)
例如,在颜色类中使用float值作为rgb值的浮点值有什么意义?它提供了更准确性吗?那空间呢?使用Float vs Ubyte有什么性能/障碍?
pro:
- 进行数学时,不需要转换为/从float转换
- 在应用许多处理步骤时,更准确地保留了中间值
- 具有更大的动态范围和分辨率
- float是GPU等自然格式
con:
- 需要更多存储
在很可能的情况下,它确实提供了更精确的精度。正如另一个答案中提到的那样,不必来回转换也有好处,这反过来又会失去中间结果 - 想象一下您的像素在float中为1.0(字节中255),并且您乘以0.65。然后将其转换回整数,即166.75-但我们将其舍入至166。因此,我们损失了0.75。如果我们进行进一步的数学,错误可能会变得更大...当然,如果某些中间步骤导致我们的价值超过255(1.0)或低于0(0.0),则完全有可能保留新的价值一段时间,然后在需要时"修复"。
当然,您不能将更多的数据存储在更少的空间中(通常),因此典型的浮点数比字节大4倍。一些GPU具有16位浮子,可容纳11位Mantissa和4-5位的指数,这使它们适合大多数简单的像素数学。但这仍然是尺寸的两倍,但不是"精确度"的两倍(我的一位同事花了很多时间试图使用16位浮子来获取算法以匹配32位浮标的结果,并且从未完全到达那里)。