python - Python:寻找更快、更不准确的 sqrt() 函数
问题描述
我正在为不需要高精度结果的大量毕达哥拉斯计算寻找更便宜、不太准确的平方根函数。输入是正整数,如有必要,我可以设置输入上限。输出到 1dp 精度 +- 0.1 如果好的话,但我什至可以输出到最接近的整数 +- 1。python 中是否有内置的东西可以帮助解决这个问题?像 math.sqrt() 这样的东西可能会做更少的近似?
解决方案
正如我在评论中所说,考虑到它与's函数的链接,我认为你math.sqrt
在本机 python中的速度不会好得多。但是,您的问题表明您需要执行大量“毕达哥拉斯计算”。我假设您的意思是您有很多带边的三角形,并且您想找到所有三角形的 c 值。如果是这样,以下内容对您来说已经足够快了。这利用了:C
sqrt
a
b
vectorization
numpy
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 方法来执行此操作:
def fast_sqrt(y, tolerance=0.05)
prev = -1.0
x = 1.0
while abs(x - prev) > tolerance: # within range
prev = x
x = x - (x * x - y) / (2 * x)
return x
但是,即使容忍度非常高(0.5
很荒谬),您也很可能不会击败math.sqrt
. 虽然,我没有基准来支持这一点:) - 但我可以为你制作它们(或者你也可以这样做!)
推荐阅读
- ssh - Gitlab权限被拒绝(公钥
- wildfly - 如何在 WildFly 18+ 中访问 OpenApi 端点?
- swift - 如何使用 onRecieve [SwiftUI,macos] 更新 GeometryReader 值
- static - 我可以/应该让我的网络应用程序部分静态并从 CDN 提供它吗?
- javascript - unt 测试 jest 自定义验证类(类验证器)及其消息?
- react-native - React Native Expo Image Saving Attempt: TypeError: Null is not an object
- delphi - 在使用 cxTreeList 的 Delphi XE6 中不允许更改列顺序
- php - 调用未定义的方法 Illuminate\Foundation\Application::share()
- swift - ios 13:无法从 AppDelegate.swift 有条件地导航到不同的 viewontroller
- filter - 反向运行 Slickgrid 的过滤器