微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决为什么 Python 在这里创建一个复数?

我在 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 将首先提高这两个项的幂,然后将否定应用于其结果。因此,如果您希望在求幂之前将否定应用于第一个数字,那么您需要将其括在括号中。

,

希望能解释

>>> -0.021678371395529073 ** 0.09090909090909091
-0.7058780799007794
>>> (-0.021678371395529073) ** 0.09090909090909091
(0.6772850578932906+0.1988688362687656j)
>>> 0.021678371395529073 ** 0.09090909090909091
0.7058780799007794

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。