方形/立方根查找表

Square/cubic root lookup table

本文关键字:查找 立方根 方形      更新时间:2023-10-16

我想知道哪种方法是为范围 [0.0, 1.0) 中浮点值的平方根和立方根创建两个查找表的最佳方法。

我已经分析了代码,并看到这是一个非常强大的性能瓶颈(因为我需要为每个值的零点几千个值计算它们)。然后我想起了查找表,并认为它们可以帮助我提高性能。

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

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

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

提前致谢

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

只需创建一个 400x1 矩阵,并通过将您希望正方形/立方体的浮点数乘以 400 来访问它。

例如,如果您想查找 0.0075 的平方。将 0.0075 乘以 400 得到 3,这是您在矩阵中的索引

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

您可以将值乘以所需的任何精度,然后使用哈希表,因为结果将是整数值。

例如,与其对 0.002 之类的东西使用浮点键值,不如给自己一个小数点后三位或四位的精度,使0.002的键值等于 2002000 。 然后,您可以快速查找存储在2000槽的哈希表键中的平方根和立方根的结果浮点值。

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

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