2024-06-07 09:26:24 发布
网友
我在寻找一个更便宜,更不精确的平方根函数,用于毕达哥拉斯的大量计算,不需要高精度的结果。输入是正整数,如果需要,我可以对输入进行上界。输出到1dp精度为+-0.1,如果好的话,但我甚至可以得到最接近的整数+-1。python中有什么内置的东西可以帮助实现这一点吗?有点像数学.sqrt()这可能会减少近似值?在
正如我在评论中所说的,我认为在原生python中,由于它与C的sqrt函数有链接,在速度上不会比math.sqrt好多少。然而,你的问题表明你需要进行大量的“毕达哥拉斯计算”。我假设你的意思是你有很多边为a和{}的三角形,你想找到所有三角形的c值。如果是这样的话,下面的内容对你来说已经足够快了。这利用了^{}和{}:
C
sqrt
math.sqrt
a
import numpy as np all_as = ... # python list of all of your a values all_bs = ... # python list of all of your b values cs = np.sqrt(np.array(all_as)**2 + np.array(all_bs)**2).tolist()
如果你的用例不同,那么请用你拥有的数据类型和你想要的操作来更新你的问题。在
但是,如果您真的想要快速平方根的python实现,可以使用Newton'ss method`来实现:
然而,即使有很高的容忍度(0.5是荒谬的),你很可能不会打败math.sqrt。虽然,我没有基准来支持这一点:)-但我可以为您制作(或者您也可以这样做!)在
0.5
@modesitt比我快:)
Newton's method是一种方法,我的贡献是牛顿方法的实现,它比modesitt建议的方法快一点(以sqrt(65)为例,下面的方法将在4次迭代后返回,而fast_sqrt将在6次迭代后返回)。在
fast_sqrt
def sqrt(x): delta = 0.1 runner = x / 2 while abs(runner - (x / runner)) > delta: runner = ((x / runner) + runner) / 2 return runner
也就是说,math.sqrt肯定会比您将要提供的任何实现更快。让我们对这两者进行基准测试:
我在我的机器(Macbook pro)上得到的输出:
sqrt took 3.229701 seconds math.sqrt took 0.074377 seconds
正如我在评论中所说的,我认为在原生python中,由于它与}的三角形,你想找到所有三角形的c值。如果是这样的话,下面的内容对你来说已经足够快了。这利用了^{} 和{}:
C
的sqrt
函数有链接,在速度上不会比math.sqrt
好多少。然而,你的问题表明你需要进行大量的“毕达哥拉斯计算”。我假设你的意思是你有很多边为a
和{如果你的用例不同,那么请用你拥有的数据类型和你想要的操作来更新你的问题。在
但是,如果您真的想要快速平方根的python实现,可以使用Newton'ss method`来实现:
^{pr2}$然而,即使有很高的容忍度(
0.5
是荒谬的),你很可能不会打败math.sqrt
。虽然,我没有基准来支持这一点:)-但我可以为您制作(或者您也可以这样做!)在@modesitt比我快:)
Newton's method是一种方法,我的贡献是牛顿方法的实现,它比modesitt建议的方法快一点(以sqrt(65)为例,下面的方法将在4次迭代后返回,而
fast_sqrt
将在6次迭代后返回)。在也就是说,
^{pr2}$math.sqrt
肯定会比您将要提供的任何实现更快。让我们对这两者进行基准测试:我在我的机器(Macbook pro)上得到的输出:
相关问题 更多 >
编程相关推荐