python - 为什么 Python 在这里创建一个复数?

标签 python python-3.x complex-numbers

我在 Python 3.8 中遇到一个奇怪的错误:
当我运行这个计算时,我得到一个复数:

>>> (1.0 / (2.0 - 0.5222232592740141 * 92.16159106468214)) ** (1.0 / (10.0 + 1))
(0.6772850578932906+0.1988688362687656j) 
但是,如果我在 Python 中手动计算,我会得到一个浮点答案:
>>> (1.0 / (2.0 - 0.5222232592740141 * 92.16159106468214))
-0.021678371395529073
>>> (1.0 / (10.0 + 1))
0.09090909090909091

>>> -0.021678371395529073 ** 0.09090909090909091
-0.7058780799007794
为什么是这样?

最佳答案

你一开始就没有考虑到负面因素。 python将实际解释什么-0.021678371395529073 ** 0.09090909090909091确实如此 -(0.021678371395529073 ** 0.09090909090909091)所以做2个正数的幂然后应用负数。但是,如果您将第一个数字和负数包装在一起,python 知道负数适用于第一个数字,而不仅仅是表达式的最终结果,您将得到复数

(-0.021678371395529073) ** 0.09090909090909091
(0.6772850578932906+0.1988688362687656j)
这就是在你的真实例子中发生的事情,因为 python 知道这个词是负数,而不是结果
要解释为什么会发生这种情况,您必须查看操作顺序。在您的表达式中,您有两个操作 -**你有两个术语 0.021678371395529073 , 0.09090909090909091下表列出了操作的顺序,在表中出现较高的那些先完成。
Operator

Description
()  Parentheses (grouping)
f(args...)  Function call
x[index:index]  Slicing
x[index]    Subscription
x.attribute Attribute reference
**  Exponentiation
~x  Bitwise not
+x, -x  Positive, negative
*, /, % Multiplication, division, remainder
+, -    Addition, subtraction
<<, >>  Bitwise shifts
&   Bitwise AND
^   Bitwise XOR
|   Bitwise OR
in, not in, is, is not, <, <=,  >,  >=,
<>, !=, ==  Comparisons, membership, identity
not x   Boolean NOT
and Boolean AND
or  Boolean OR
lambda  Lambda expression
从这个表中你可以看到指数(**)比否定(-x)有更高的先例。所以这意味着 python 将首先提高这两个项的幂,然后将否定应用于其结果。因此,如果您希望在求幂之前将否定应用于第一个数字,那么您需要将其包装在括号中。

关于python - 为什么 Python 在这里创建一个复数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66903214/

相关文章:

python - 在 Python 中将 SQL 转换为 json

python - 为什么 (1 == 2 != 3) 在 Python 中计算为 False?

python - 如何从预训练模型中删除正则化?

python - 如果我的类型是函数,我可以在 Python 中使用什么类型提示?

java - 处理:复数库?

c++ - 如何从 C++ 中的文本文件中读取复数数组

Python Sympy 复数的角度?

python 列表列表插入换行符

python - 如何选择最右边带有值的列?

Python 无法引用调用类中的列表