我遇到了一些混乱的行为,在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)
看来这些陈述对应该给出相同的答案吗?
在 Python 中,我想要一种将其复数字符串输出转换为等效字符串表示的好方法,当由 Python 解释时,该表示给出相同的值。
基本上,我想要complexStr2str(s: str): str具有与eval(complexStr2str(str(c)))无法区分的属性的函数c,对于任何c其值类型为 complex 的函数。然而,complexStr2str()只需要处理复杂值str()或repr()输出的字符串模式类型。注意对于复数值str(),repr()做同样的事情。
我所说的“不可区分”并不是==Python 意义上的;你可以定义(或重新定义)它意味着你想要的任何东西;“不可区分”意味着如果a程序中有代表某个值的字符串,并将程序中的字符串替换为字符串b(可能正好是a),则无法区分 Python 程序的运行和替换程序,缺乏对程序的内省。
请注意,尽管前者是 Python 将为or输出的内容(-0-0j),-0j但这与. 如下面的交互式会话所示,实部和虚部为 -0.0,实部和虚部为正0.0。str(-0j)repr(-0j)-0jfloat-0-0jfloat
问题是像值的存在而变得更加困难nan和inf。尽管在 Python 3.5+ ish 中您可以import从math中获取这些值,但出于各种原因,我想避免这样做。不过使用float("nan")是没问题的。
考虑这个 Python 会话:
>>> -0j
(-0-0j)
>>> -0j.imag …Run Code Online (Sandbox Code Playgroud)