最初,我在寻找一种将字节转换为浮点数的方法,然后发现了表明最快的答案是创建查找表。

所以我想知道是否有人知道我可以使用的预先存在的查找表。

最佳答案

通常,您将使用几行代码和一个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;

在这种情况下,查找表应该比直接计算更快。数学(三角函数等)越复杂,性能增益就越大。另一个常见用法是伽马校正图像(指数函数)。

关于byte - 我在哪里可以找到浮点查找表的字节?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1089235/

10-12 04:53