如何在Python中计算平方根?

时间:2012-03-07 02:48:52

标签: python math sqrt

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

x = 16

sqrt = x**(.5)
returns 4

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

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

10 个答案:

答案 0 :(得分:210)

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

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

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

答案 1 :(得分:93)

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

这种行为在Python 2.x中是“正常的”,而在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将评估为0

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

import math
math.sqrt(x)

答案 2 :(得分:16)

import math
math.sqrt( x )

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

答案 3 :(得分:10)

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

>>> 1/2
0

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

>>> 1.0/2
0.5
>>> 16**(1.0/2)
4.0

答案 4 :(得分:7)

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

from __future__ import division

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

sqrt = x**(1.0/2)

答案 5 :(得分: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()的值相同。

答案 6 :(得分:0)

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

答案 7 :(得分:0)

如果要按照计算器实际执行的方式进行操作,请使用巴比伦技术。说明herehere

假设您要计算2的平方根:

a=2

a1 = (a/2)+1
b1 = a/a1
aminus1 = a1
bminus1 = b1


while (aminus1-bminus1 > 0):
    an = 0.5 * (aminus1 + bminus1)
    bn = a / an
    aminus1 = an
    bminus1 = bn
    print(an,bn,an-bn)

答案 8 :(得分:-1)

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

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

答案 9 :(得分:-1)

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

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)