私はPythonの複素数の平方根を使っていくつかの混乱した振る舞いを経験しました。このコードを実行すると:Pythonの複素数の平方根
from cmath import sqrt
a = 0.2
b = 0.2 + 0j
print(sqrt(a/(a - 1)))
print(sqrt(b/(b - 1)))
出力に
0.5j
-0.5j
を与える同じようなことは、文のこれらのペアは、同じ答えを与えるべきで表示されます
print(sqrt(-1 * b))
print(sqrt(-b))
とどうなりますか?
[ウォルフラム(https://www.wolframalpha.com/)によれば、あなたは正しいです。最初のペア([link](https://www.wolframalpha.com/input/?i=sqrt(0.2 +%2F +(0.2 + - + 1))と[link](https://www.wolframalpha .COM /入力/ I =のSQRT((+ 0.2%2B0i)+%2F +(+(0.2%2B0i)+ - 1+))?))の両方が '0.5i'、及び第二の対であるべきである([リンク] (https://www.wolframalpha.com/input/?i=sqrt(-1+*+(0.2+%2B+0i)))と[link](https://www.wolframalpha.com/input/) ?i = sqrt(-1 + * +(0.2 +%2B + 0i))))は両方とも0.447214 ... iでなければならない。 cmath.sqrt() ''のソースは[こちら](https://hg.python.org/cpython/file/tip/Modules/cmathmodule.c#l732)... – Jens
どちらの答えが正しいか、疑問です異なるコンジュゲートを返す理由です。 – tzaman
FWIWの動作は2.7と3.5で同じように見えます。 – tzaman