【问题标题】:where can i find a byte to float lookup table?我在哪里可以找到一个字节来浮动查找表?
【发布时间】:2009-07-06 21:11:13
【问题描述】:

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

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

【问题讨论】:

  • 我正在使用objective c,所以这是我到目前为止所写的创建查找表lookupTable = new float [256]; for (int i = 0; i
  • 因为你需要的值是0.0 - 1.0,所以会涉及到浮点除法。这在一定程度上取决于所涉及的 CPU,但可以肯定地说使用查找表会更快。也请参阅我的更新答案。

标签: byte lookup


【解决方案1】:

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

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

【讨论】:

  • 我使用查找表将原始 YUV 帧字节转换为 RGB 浮点数。感谢您的代码。
【解决方案2】:

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

float floatVal = (float)byteVal;

【讨论】:

  • 你真的可以直接进行类型转换吗?
  • 这不是类型转换,而是转换。它只是看起来和演员表一样。
猜你喜欢
  • 2013-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-16
  • 2012-05-30
  • 2013-07-13
  • 2012-06-05
  • 2011-04-24
相关资源
最近更新 更多