import operator
>>> operator.truediv(-5.6, complex(-1, 0)) #eg1
(5.6-0j)
>>> operator.truediv(-5.6, complex(0, -1)) #eg2
(-0-5.6j)
>>> operator.truediv(-5.6, complex(0, 1)) #eg3
5.6j
>>> operator.truediv(-5.6, complex(1, 0)) #eg4
(-5.6+0j)
>>> operator.truediv(5.6, complex(0,-1)) #eg 5
(-0+5.6j)
有没有办法知道将复数转换成它在Python交互解释器中出现的字符串表示形式的确切规则?像某些人一样
在eg1中它打印0j
,但在eg3中它不打印。
有时它会打印0
,-0
,就像在eg1和eg4中一样
eg2和eg5。
我知道这没什么区别,但我想实现与Python完全相同的功能。我的意思是输出应该完全相同。在
任何帮助都将不胜感激。 这不是家庭作业问题,也谢谢你的阅读。在
Python将始终显示复数的虚部,因为否则您无法从输出中分辨出它确实是复杂的。这类似于在浮点数上包含
.0
,即使它是一个整数。在实际零件在不完全为+0时显示。在这个例子中,你给出的实际零件是显示出来的,因为它是负零。请注意,在浮点中,负数和正零的表示方式不同,即使它们比较相等:
这对于模拟Python的输出可能没有太大帮助,因为您可能无法轻松预测Python何时在其结果中得到负0。例如:
^{pr2}$加法使实部正规化为+0
与正虚数相乘保持实部负号,但乘以负虚数不会使实部负。在
但所有这些都只是实现细节,所以在Python的不同实现中可能会有所不同。在
浮点对于正零和负零有两种不同的表示形式,这是ieee754浮点实现的一个细节。见https://en.wikipedia.org/wiki/Signed_zero
源代码中检测是否输出真实部分的部分包括:
^{4}$第一部分适用于两种形式的零。第二部分只有当实部不是负的(}的值,因此{}将是{}。在
copysign(x,y)
给出了带有y
符号的{如果您想实现另一个程序来精确复制CPython解释器的当前行为,可以研究复数表示的源代码:^{} 。此函数负责将复数转换为字符串。在
一些血腥的细节可以在函数^{} 中找到。在
我不认为浮点数的确切交互输出是官方Python语言规范的一部分,因此源代码可能是这里最好的指南。在
编辑:如果你不想重新发明轮子,那可能是时候研究一下embedding Python in another application。在
相关问题 更多 >
编程相关推荐