我想知道在范围[0.0, 1.0)
范围内为平方根和立方根创建两个查找表的最佳方法。
我已经对代码进行了分析,发现这是一个非常强大的性能瓶颈(因为我需要计算每个代码的十分之几的值)。然后我想起了查找表,并认为它们会帮助我提高性能。
由于我的值在一个很小的范围内,我正在考虑用步骤分割范围,比方说0.0025
(希望它足够)但我不确定哪个应该是最有效的检索方式它们。
我可以轻松填充查找表,但我需要一种方法来有效地获取给定浮点数的正确值(在任何步骤中都不会离散化)。对此问题的任何建议或众所周知的方法?
我正在使用移动平台,只是为了指定。
提前致谢
答案 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个值。或者在完成阈值测试之前是否需要额外的计算,以便查找的值不是最终结果。