-6

这是我的代码:

import cmath
root = (cmath.sqrt(25))
print (root)
raw_input()

我面临的问题是根的结果是 5+0j,这是不可取的,我只想要平方根。我怎样才能解决这个问题?

4

4 回答 4

6

使用math模块代替cmath模块;后者仅适用于复数:

>>> import math
>>> print math.sqrt(25)
5.0

对于它的价值,如果您期望一个复数cmath,结果是正确的。你可以只取结果的一部分,但由于模块中有一个普通的浮点等价物,让你的计算机做额外的工作是没有意义的。.realmath

于 2013-03-10T12:20:20.270 回答
3

结果本身是正确的。的平方根25 + 0j5 + 0j

j从哪里来的?它是隐含的,因为您使用的是复杂的数学 ( cmath) 库。

如果您只想要复数的实部,请执行以下操作:

>>> root = (cmath.sqrt(25))
>>> root.real
5.0

最后,如果您只想处理实数,请使用该math库。

于 2013-03-10T12:24:51.200 回答
0

结果是正确的!

那是因为您正在使用复杂的数学库来查找平方根。

毕竟,

5+0j

是 25 的复平方根:

(5+0j)*(5+0j) = 25 + 2*0j + (0j)^2 = 25 + 0 + 0 = 25

使用该math模块代替“常规”平方根。

或者:使用通过以下方式访问实部:

root.real

通常,您可能希望使用复数而不是自然数来进行通用性和数学错误检测 - 但这是另一个讨论。

于 2013-03-10T12:23:32.327 回答
0

cmath适用于复数,而不是实数。这应该工作!

import math
import cmath
def sqrt(n):
    if n < 0:
        return cmath.sqrt(n)
    else:
        return math.sqrt(n)
于 2020-11-01T13:28:11.470 回答