在Python中设计Sqrt函数
这有点像学术练习。我正在用Python实现一个sqrt函数。这是我的密码在Python中设计Sqrt函数,python,python-3.x,Python,Python 3.x,这有点像学术练习。我正在用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
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
因此
有人能帮我吗。谢谢。您可以使用
它收敛速度非常快。下面是sqrt(2)
的一个示例:
对于sqrt(3)
:
现在,您只需将for
循环替换为while
和精度条件,并返回结果,而不只是打印结果
def sqrt(num, param):
return float(str(num**0.5)[:param+len(str(num).split("."))+1])
你可以做1/2次方,你可以试着找到平方根
#!/usr/bin/env python
def ntsqrt(n):
sgn = 0
if n < 0:
sgn = -1
n = -n
val = n
while True:
last = val
val = (val + n / val) * 0.5
if abs(val - last) < 1e-9:
break
if sgn < 0:
return complex(0, val)
return val
if __name__ == "__main__":
print ntsqrt(25.0)
拯救泰勒级数?你只能计算完美平方的事实是因为你只考虑整数。确定代码的哪一部分负责这一点,你就会知道该怎么做。你的代码只考虑舍入值或十进制值,而不是浮点值。“当数字不是完美的平方时,这不起作用”,因此你需要查看当前近似值的误差,例如
m2=mid*mid;err=abs(m2-x)
。顺便说一句,尽量避免多次计算相同的值,如果需要多次计算mid*mid
,请计算一次并保存。但我强烈建议您使用巴比伦法:一旦它开始收敛,每个循环上正确位的数量将加倍,而对分算法只能为每个循环添加一个额外的正确位。如果您这样做,您也可以执行mysqrt=math.sqrt
。当然,尽管牛顿的平方根法实际上与巴比伦法(又名Heron的方法)相同。或者您可以计算增量:delta=(n/val-val)*0.5;val+=delta
以避免在测试中进行减法运算。
def sqrt(x):
n = 1
for _ in range(10):
print(n)
n = (n + x/n) * 0.5
1
1.5
1.41666666667
1.41421568627
1.41421356237
1.41421356237
1.41421356237
1.41421356237
1.41421356237
1.41421356237
1
2.0
1.75
1.73214285714
1.73205081001
1.73205080757
1.73205080757
1.73205080757
1.73205080757
1.73205080757
def sqrt(num, param):
return float(str(num**0.5)[:param+len(str(num).split("."))+1])
#!/usr/bin/env python
def ntsqrt(n):
sgn = 0
if n < 0:
sgn = -1
n = -n
val = n
while True:
last = val
val = (val + n / val) * 0.5
if abs(val - last) < 1e-9:
break
if sgn < 0:
return complex(0, val)
return val
if __name__ == "__main__":
print ntsqrt(25.0)
5.00000000005