在使用功能角度时,我遇到了这个结果:
julia> angle(-1+im*0.0)
3.141592653589793
julia> angle(-1-im*0.0)
-3.141592653589793
这不是错误的,但可能会引起不适,因为
通常,角度的评估在(-pi,pi]
区间内。
答案 0 :(得分:7)
这是正确和有意的。你遇到了所谓的"branch cut":一个多值函数必须在它可以返回的多个值之间进行选择的点。 John D. Cook有一个short but good article介绍了这个概念,并概述了Common Lisp如何解决为各种相关函数定义各种分支切割的问题。
在angle
函数应用于复平面中的点-1的情况下,π的任何奇数倍理论上都是正确的答案。角度值被归一化为在[-π,π]范围内,然而,其仅留下π的两个奇数倍以在:±π之间进行选择。哪一个应该在复平面上以-1返回?从某种意义上说,问题是“你从哪个方向接近实际线路?”如果在复平面中从上方接近-1,那么π是尊重连续性的答案,因为稍微高于实线的值的角度接近π。但是,如果从下面接近-1,则-π是连续答案,因为实线下方的角度接近-π。因此,当我们评估angle
接近-1时,虚部的符号是重要的 - 即使其值为零(±0.0
) - 所以我们为-1 ± 0.0im
给出不同的答案:
angle(-1 + 0.0im) == +3.141592653589793
angle(-1 - 0.0im) == -3.141592653589793
这些答案尊重angle
关于论证虚构部分符号的连续性。许多复杂函数在实线上具有类似的分支切割,具有不同的结果,具体取决于其参数的零值虚部的符号。