我最初正在寻找将字节转换为浮点数的方法,并找到表示最快的答案是创建查找表。
所以我想知道是否有人知道我可以使用的预先存在的查找表。
答案 0 :(得分:4)
通常,您将使用几行代码和for循环或任何适合您目的的内容初始化查找表。只有在对有限数量的可能输入进行大量转换时,它才有用。
以下示例仅用于演示构建和使用查找表的基本技巧。除非涉及更多的数学运算,否则如果你实现这一点,实际上会有性能损失(见下文)。
float[] lookupTable = new float[256];
for (int i = 0; i < 256; i++)
{
lookupTable[i] = (float)i;
}
float convertedValue = lookupTable[byteValue];
代码是C#,我对目标C没有经验。在C ++中,数组声明会有所不同,但你明白了。
在上面的例子中,没有性能增益,因为不涉及计算,只是从字节到浮点的转换。考虑涉及浮点除法的情况(如您的情况):
lookupTable[i] = i / 255f;
在这种情况下,查找表应该比使用直接计算更快。数学(三角学等)越复杂,性能增益越大。另一种常见用法是伽马校正图像(指数函数)。
答案 1 :(得分:2)
查找表?我们不需要stinkin'查找表!
float floatVal = (float)byteVal;