如何在二进制方程中求解x最多6个小数位:n ** x + x = 0使用二进制搜索?
我用下面的代码在类似的问题中得到正整数n的平方根:
n=int(input())
#find square root of n here
def sqroot(n):
l = 0
r = n
while abs(l-r) > 10**(-5):
mid = (l+r)/2
if mid**2 > n:
r = mid
else:
l = mid
return round(mid,4)
print('%.4f' % sqroot(n))
平方根方法利用平方根的特定属性。您应该尝试使用牛顿-拉夫森方法[]
def findOrigin(fn,x0=-1,x1=1,precision=0.00001): while abs(x1-x0)>precision: f0,f1 = fn(x0),fn(x1) x0,x1 = x1,x1 - f1*(x1-x0)/(f1-f0) return x1
输出:
r = findOrigin(lambda x:2**x-x)
print(r) # -0.06667246267859094