使用math.fmod()的python奇怪的结果

时间:2014-12-25 18:32:33

标签: python modulus

我正在使用Python 3.4中的数学模块,当我使用fmod函数时,我得到了一些奇怪的结果,我很难从python网站获取详细信息。

一个简单的例子如下:

from math import *

x = 99809175801648148531
y = 6.5169020832937505
sqrt(x)-cos(x)**fmod(x, y)*log10(x)

它返回:

(9990454237.014296+8.722374238018135j)

如何解释这个结果?什么是j? 这是一个像我一样的想象数吗? 如果是这样,为什么j而不是我? 任何信息,以及关于fmod的一些资源的链接都是非常受欢迎的。

3 个答案:

答案 0 :(得分:1)

您获得的结果是complex number,因为您取消了负数。 ij只是表示imaginary number uniti在数学中使用更多且j更多地用于工程的符号选择。您可以在Python选择使用j

的文档中看到

https://docs.python.org/2/library/cmath.html#conversions-to-and-from-polar-coordinates

答案 1 :(得分:0)

此处ji的平方根-1相同。这是工程中常用的惯例,其中i用于表示电流。

在您的情况下出现复数的原因是您将负数提升到分数幂。有关进一步的讨论,请参阅How do you compute negative numbers to fractional powers?

答案 2 :(得分:0)

cos(x)是负数。当您将负数提升为非整数幂时,获得复杂结果并不奇怪。大多数负数都是复杂的。

>>> x = 99809175801648148531
>>> y = 6.5169020832937505

>>> cos(x)
-0.7962325418899466
>>> fmod(x,y)
3.3940870272073056
>>> cos(x)**fmod(x,y)
(-0.1507219382442201-0.436136801343955j)

虚数可以用'i'或'j'表示。我相信原因是历史性的。数学家偏爱'我'想象。电气工程师不想让想象中的'i'与'i'混淆当前,所以他们使用'j'。现在,两者都被使用了。