Cle*_*cus 14 python math complex-numbers
我遇到了一些混乱的行为,在python中使用复数的平方根.运行此代码:
from cmath import sqrt
a = 0.2
b = 0.2 + 0j
print(sqrt(a / (a - 1)))
print(sqrt(b / (b - 1)))
Run Code Online (Sandbox Code Playgroud)
给出输出
0.5j
-0.5j
Run Code Online (Sandbox Code Playgroud)
类似的事情发生在
print(sqrt(-1 * b))
print(sqrt(-b))
Run Code Online (Sandbox Code Playgroud)
看来这些陈述对应该给出相同的答案吗?
两个答案(+0.5j和-0.5j)都是正确的,因为它们是复共轭 - 即实部是相同的,虚部是符号翻转的.
查看代码会使行为变得清晰 - 结果的虚部始终与输入的虚部具有相同的符号,如第790行和第793行所示:
r.imag = copysign(d, z.imag);
Run Code Online (Sandbox Code Playgroud)
由于a/(a-1)是0.25其隐式的0.25+0j,你得到一个积极的结果; b/(b-1)产生0.25-0j(由于某种原因;不确定为什么它不会导致0.25+0jtbh)所以你的结果同样是负面的.
编辑:这个问题对同一个问题有一些有用的讨论.