cxx*_*xxl 19 python complex-numbers
我想知道Python(3.3.0)打印复数的方式.我正在寻找解释,而不是改变印刷品的方法.
例:
>>> complex(1,1)-complex(1,1)
0j
Run Code Online (Sandbox Code Playgroud)
为什么不打印"0"?我的猜测是:保持类型复杂的输出.
下一个例子:
>>> complex(0,1)*-1
(-0-1j)
Run Code Online (Sandbox Code Playgroud)
好吧,一个简单的"-1j"或"( - 1j)"就可以了.为什么"-0"?? 和+0不一样吗?它似乎不是一个舍入问题:
>>> (complex(0,1)*-1).real == 0.0
True
Run Code Online (Sandbox Code Playgroud)
当假想部分变为正数时,-0消失:
>>> complex(0,1)
1j
>>> complex(0,1)*-1
(-0-1j)
>>> complex(0,1)*-1*-1
1j
Run Code Online (Sandbox Code Playgroud)
又一个例子:
>>> 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
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么吗?
Tho*_*mas 16
它打印0j以表明它仍然是一个complex值.您也可以这样输入:
>>> 0j
0j
Run Code Online (Sandbox Code Playgroud)
剩下的可能是IEEE 754浮点表示法的神奇结果,它区分0和-0,即所谓的有符号零点.基本上,只有一个位表示数字是正数还是负数,无论数字是否恰好为零.这解释了为什么1j * -1给出具有负零实部的东西:正零乘以-1.
标准要求-0等于+0,这解释了为什么(1j * -1).real == 0.0仍然成立.
了Python仍然决定打印-0究其原因,是在复杂的世界,这些使分支裁减差异,例如在的phase功能:
>>> phase(complex(-1.0, 0.0))
3.141592653589793
>>> phase(complex(-1.0, -0.0))
-3.141592653589793
Run Code Online (Sandbox Code Playgroud)
这是关于想象的部分,而不是真实的部分,但很容易想象实际部分的符号会产生类似差异的情况.
| 归档时间: |
|
| 查看次数: |
12631 次 |
| 最近记录: |