2

我最初正在寻找一种将字节转换为浮点数的方法,并找到表明最快的答案是创建一个查找表。

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

4

2 回答 2

4

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

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

于 2009-07-06T21:16:45.357 回答
2

查找表?我们不需要臭气熏天的查找表!

float floatVal = (float)byteVal;
于 2009-07-06T21:51:06.210 回答