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