Python3输出奇怪的算术结果

2024-10-03 13:21:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我用Python编写了一个计算器,正在处理指数运算。我在处理小数的指数时遇到了一些非常奇怪的问题,所以我尝试在控制台中重现这个问题。这就是我得到的:

Python 3.5.2 (default, Oct 11 2016, 04:59:56) 
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.38)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> num1 = -3.0
>>> num2 = 2.5
>>> opr = '^'
>>> if opr == '^':
...     print(num1**num2)
... 
(4.772588574262081e-15+15.588457268119896j)
>>> -3.0**2.5
-15.588457268119896

有没有关于如何避免第一个输出并获得第二个输出的指针?我甚至不完全确定第一个输出代表什么。你知道吗


Tags: defaultappleon指数oct计算器compatiblellvm
3条回答

不同的输出仅仅是由于operator precedence导致的操作顺序不同,请使用paranethes ()确保应用正确的顺序:

>>> -3.0**2.5
-15.588457268119896
>>> -(3.0**2.5)
-15.588457268119896
>>> (-3.0)**2.5
(4.772588574262081e-15+15.588457268119896j)

第一个输出正确。这是一个复数,因为你有负数的十进制幂。你知道吗

您不能复制它,因为在最后一行中,您应该编写(-3.0)**2.5。您编写的内容相当于-(3.0**2.5),因为指数运算的优先级高于一元运算符-。你知道吗

你的问题不是Python而是数学:

(-3.0) ^ 2.5 = (-3) ^ (5/2) = sqrt((-3)^5) = sqrt(-243) = -15.588...j

你可能知道,负数没有真正的平方根。它们有复数的平方根,用j表示。你知道吗

当你把它直接写到控制台时,他理解了另一件事:

-3.0**2.5 = -(3^2.5) = -( 3 ^ (5/2) ) = - sqrt(3^5) = - sqrt(243) = -15.588...

将其直接写入控制台的正确形式是:

<< (-3.0)**2.5
>> (4.772588574262081e-15+15.588457268119896j)

相关问题 更多 >