问题:如何在Python中计算平方根?
为什么Python会给出“错误”的答案?
x = 16
sqrt = x**(.5) #returns 4
sqrt = x**(1/2) #returns 1
是的,我知道import math
并使用sqrt
。但我正在寻找以上答案。
回答 0
sqrt=x**(1/2)
在做整数除法。1/2 == 0
。
因此,您在第一个实例中计算x (1/2),在第二个实例中计算x (0)。
没错,这是对其他问题的正确答案。
回答 1
您必须编写:sqrt = x**(1/2.0)
,否则将执行整数除法并1/2
返回表达式0
。
此行为是在Python 2.x的“正常”,而在Python 3.x的1/2
计算结果为0.5
。如果您希望Python 2.x代码的行为类似于3.x wrt除法写入from __future__ import division
-那么1/2
将评估0.5
为并向后兼容,1//2
评估为0
。
作为记录,计算平方根的首选方法是:
import math
math.sqrt(x)
回答 2
import math
math.sqrt( x )
这是对答案链的琐碎补充。但是,由于该主题在Google上非常普遍,因此我认为值得添加。
回答 3
/
在Python 2中执行整数除法:
>>> 1/2
0
如果其中一个数字是浮点数,则按预期方式工作:
>>> 1.0/2
0.5
>>> 16**(1.0/2)
4.0
回答 4
您所看到的是整数除法。要默认获得浮点除法,
from __future__ import division
或者,您可以将1/2的1或2转换为浮点值。
sqrt = x**(1.0/2)
回答 5
这可能有点迟了,但是计算平方根的最简单,最准确的方法是牛顿法。
您有一个要计算其平方根的数字,(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)
数字是30,估计是5。每个递归调用的结果是:
5.5
5.477272727272727
5.4772255752546215
5.477225575051661
最后的结果是最精确的数字平方根计算。它与内置函数math.sqrt()的值相同。
回答 6
可能是一种简单的记住方式:在分子(或分母)后添加点
16 ** (1. / 2) # 4
289 ** (1. / 2) # 17
27 ** (1. / 3) # 3
回答 7
您可以使用NumPy计算数组的平方根:
import numpy as np
np.sqrt([1, 4, 9])
回答 8
我希望下面提到的代码能够回答您的问题。
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)