这是一个学术练习。我在 Python 中实现了一个 sqrt 函数。这是我的代码,
def mySqrt(x):
low, high = 1, x
while low < high:
mid = low + (high - low)/2
if mid * mid > x:
high = mid - 1
elif mid * mid < x:
low = mid
else:
return mid
return low
问题是当数字不是一个完美的正方形时,这不起作用。 我想重新设计这个函数,仍然使用 log n 复杂度,它将 sqrt 的值返回到指定的小数位数。 所以它就像是,
def sqrt(num, param):
pass
因此
sqrt(5, 2) = 2.41
sqrt(5, 3) = 2.414
谁能帮我解决这个问题。谢谢。
最佳答案
您可以使用 Babylonian method .
def sqrt(x):
n = 1
for _ in range(10):
print(n)
n = (n + x/n) * 0.5
收敛速度极快。以下是 sqrt(2)
的示例:
1
1.5
1.41666666667
1.41421568627
1.41421356237
1.41421356237
1.41421356237
1.41421356237
1.41421356237
1.41421356237
对于 sqrt(3)
:
1
2.0
1.75
1.73214285714
1.73205081001
1.73205080757
1.73205080757
1.73205080757
1.73205080757
1.73205080757
现在您只需将 for
循环替换为 while
和一个精度条件并返回结果,而不仅仅是打印它。
关于python - 在 Python 中设计 Sqrt 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47741833/