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