Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中设计Sqrt函数_Python_Python 3.x - Fatal编程技术网

在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

这有点像学术练习。我正在用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
因此

有人能帮我吗。谢谢。

您可以使用

它收敛速度非常快。下面是
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