方形/立方根查找表

时间:2012-04-18 18:22:48

标签: c++ floating-point lookup-tables

我想知道在范围[0.0, 1.0)范围内为平方根和立方根创建两个查找表的最佳方法。

我已经对代码进行了分析,发现这是一个非常强大的性能瓶颈(因为我需要计算每个代码的十分之几的值)。然后我想起了查找表,并认为它们会帮助我提高性能。

由于我的值在一个很小的范围内,我正在考虑用步骤分割范围,比方说0.0025(希望它足够)但我不确定哪个应该是最有效的检索方式它们。

我可以轻松填充查找表,但我需要一种方法来有效地获取给定浮点数的正确值(在任何步骤中都不会离散化)。对此问题的任何建议或众所周知的方法?

我正在使用移动平台,只是为了指定。

提前致谢

4 个答案:

答案 0 :(得分:4)

你有(1.0-0.0)/0.0025 = 400步

只需创建一个400x1矩阵,然后通过将您想要的方形/立方体浮点数乘以400来访问它。

例如,如果你想查找0.0075的平方。乘以0.0075乘以400得到3,这是矩阵中的指数

答案 1 :(得分:1)

double table_sqrt(double v)
{
    return table[(unsigned int)(v / 0.0025)];
}

答案 2 :(得分:0)

您可以将值乘以您想要的任何精度,然后使用散列表,因为结果将是整数值。

例如,不要使用0.002之类的浮点键值,而是给自己一个三位或四位小数的精度,使0.002的键值等于{{1 }或200。然后,您可以快速查找存储在2000插槽的哈希表键中的方形和立方根的结果浮点值。

如果您还希望从插槽之间的非谨慎范围中获取值,则可以使用数组或树而不是散列表,以便通过插值生成“中间”值存储在两个相邻键值槽的根之间。

答案 3 :(得分:0)

如果您只需要拆分为10个不同的条带,请找到与条带之间的阈值对应的输入,并使用展开的二进制搜索来测试这9个值。或者在完成阈值测试之前是否需要额外的计算,以便查找的值不是最终结果。