编程语言
首页 > 编程语言> > Python中复数的格式

Python中复数的格式

作者:互联网

我想知道Python(3.3.0)打印复数的方式.我正在寻找解释,而不是改变印刷品的方法.

例:

>>> complex(1,1)-complex(1,1)
0j

为什么不打印“0”?我的猜测是:保持类型复杂的输出.

下一个例子:

>>> complex(0,1)*-1
(-0-1j)

好吧,一个简单的“-1j”或“( – 1j)”就可以了.为什么“-0”??是不是和0相同?它似乎不是一个舍入问题:

>>> (complex(0,1)*-1).real == 0.0
True

当假想部分变为正数时,-0消失:

>>> complex(0,1)
1j
>>> complex(0,1)*-1
(-0-1j)
>>> complex(0,1)*-1*-1
1j

又一个例子:

>>> complex(0,1)*complex(0,1)*-1
(1-0j)
>>> complex(0,1)*complex(0,1)*-1*-1
(-1+0j)
>>> (complex(0,1)*complex(0,1)*-1).imag
-0.0

我在这里错过了什么吗?

解决方法:

它打印0j表示它仍然是一个复杂的值.您也可以这样输入:

>>> 0j
0j

其余的可能是IEEE 754 floating point representation的魔力的结果,它区分0和-0,即所谓的signed zero.基本上,只有一个位表示数字是正数还是负数,无论数字是否发生为零.这解释了为什么1j * -1给出具有负零实部的东西:正零得到乘以-1.

标准要求-0等于0,这解释了为什么(1j * -1).real == 0.0仍然成立.

Python仍然决定打印-0的原因是,在复杂的世界中,这些会对分支切割产生影响,例如在the phase function中:

>>> phase(complex(-1.0, 0.0))
3.141592653589793
>>> phase(complex(-1.0, -0.0))
-3.141592653589793

这是关于想象的部分,而不是真实的部分,但很容易想象实际部分的符号会产生类似差异的情况.

标签:complex-numbers,python
来源: https://codeday.me/bug/20191001/1839628.html