首页 文章

如何在Python中计算平方根?

提问于
浏览
103

为什么Python会给出“错误”的答案?

x = 16

sqrt = x**(.5)
returns 4

sqrt = x**(1/2)
returns 1

是的,我知道 import math 并使用 sqrt . 但我正在寻找上述答案 .

9 回答

  • 6

    sqrt=x**(1/2) 正在进行整数除法 . 1/2 == 0 .

    所以你在第一个实例中计算x(1/2),在第二个实例中计算x(0) .

    所以这没有错,这是对不同问题的正确答案 .

  • 88

    你必须写: sqrt = x**(1/2.0) ,否则执行整数除法,表达式 1/2 返回 0 .

    这种行为在Python 2.x中是"normal",而在Python 3.x中 1/2 的计算结果为 0.5 . 如果您希望Python 2.x代码的行为类似于3.x w.r.t.除写 from __future__ import division - 然后 1/2 将评估为 0.5 并且为了向后兼容, 1//2 eill评估为 0 .

    而对于记录,计算平方根的首选方法是:

    import math
    math.sqrt(x)
    
  • 15
    import math
    math.sqrt( x )
    

    这是答案链的一个微不足道的补充 . 然而,由于主题是非常常见的谷歌搜索,我相信这值得添加 .

  • 201

    / 在Python 2中执行整数除法:

    >>> 1/2
    0
    

    如果其中一个数字是浮点数,它按预期工作:

    >>> 1.0/2
    0.5
    >>> 16**(1.0/2)
    4.0
    
  • -1

    你所看到的是整数除法 . 要默认获得浮点除法,

    from __future__ import division
    

    或者,您可以将1或2的1/2转换为浮点值 .

    sqrt = x**(1.0/2)
    
  • -1

    这可能有点迟,但计算平方根的最简单和准确的方法是牛顿方法 .

    你有一个数字,你想要计算它的平方根 (num) ,你猜测它的平方根 (estimate) . 估计可以是大于0的任何数字,但有意义的数字会显着缩短递归调用深度 .

    new_estimate = (estimate + num / estimate) / 2
    

    该线用这两个参数计算更准确的估计 . 您可以将new_estimate值传递给函数并计算另一个比前一个更准确的new_estimate,或者您可以像这样制作递归函数定义 .

    def newtons_method(num, estimate):
        # Computing a new_estimate
        new_estimate = (estimate + num / estimate) / 2
        print(new_estimate)
        # Base Case: Comparing our estimate with built-in functions value
        if new_estimate == math.sqrt(num):
            return True
        else:
            return newtons_method(num, new_estimate)
    

    例如,我们需要找到30的平方根 . 我们知道结果在5到6之间 .

    newtons_method(30,5)
    

    number为30,估计值为5.每次递归调用的结果为:

    5.5
    5.477272727272727
    5.4772255752546215
    5.477225575051661
    

    最后的结果是数字平方根的最精确计算 . 它与内置函数math.sqrt()的值相同 .

  • 1

    也许一个简单的记忆方法:在分子(或分母)之后加一个点16 **(1./2)#4 289 **(1./2)#17 27 **(1./3)#3

  • 0

    我希望下面提到的代码能回答你的问题 .

    from __future__ import print_function
    
    def root(x,a):
        y = 1 / a
        y = float(y)
        print(y)
        z = x ** y
        print(z)
    
    base = input("Please input the base value:")
    power = float(input("Please input the root value:"))
    
    
    root(base,power)
    
  • 10

    您可以使用NumPy计算数组的平方根:

    import numpy as np
     np.sqrt([1, 4, 9])
    

相关问题