我正在处理一系列 Y 值相同但 X 值不同的点。我通过将 X 加一来遍历这些点。例如,我可能有 Y = 50,X 是从 -30 到 30 的整数。我的算法的一部分涉及找到从每个点到原点的距离,然后进行进一步处理。
分析后,我发现距离计算中的 sqrt 调用占用了我大量的时间。有没有迭代的方法来计算距离?
换句话说:
我想有效地计算: r[n] = sqrt(x[n]*x[n] + y*y))
. 我可以保存上一次迭代的信息。每次迭代都通过增加 x 来改变,所以x[n] = x[n-1] + 1
. 我不能使用 sqrt 或 trig 函数,因为它们太慢了,除了在每个扫描线的开头。
我可以使用近似值,只要它们足够好(小于 0.l% 的误差)并且引入的误差是平滑的(我不能将它们放入预先计算的近似值表中)。
附加信息:x 和 y 始终是介于 -150 和 150 之间的整数
明天我将尝试几个想法,并根据哪个最快来标记最佳答案。
结果
我做了一些计时
- 距离公式:16 ms/迭代
- Pete 的 interperlating 解决方案:8 ms / 迭代
- wrang-wrang 预计算解:8ms/迭代
我希望测试能在两者之间做出决定,因为我喜欢这两个答案。我将选择Pete's,因为它使用的内存更少。