In python3:
>>> abs(-5) == 5
and
>>> abs(5) == 5
but
>> abs(5+0j) == 5.0
答案 0 :(得分:7)
The absolute value of a complex number a+bj, is defined as the distance between the origin (0,0) and the point (a,b) in the complex plane. In other words, it's sqrt(a2 + b2).
答案 1 :(得分:3)
Because the absolute value of a complex number is the distance from origin to the number on the complex plane (where the two components of the complex number form the coordinates).
The imaginary i
and real r
components of a complex number can be seen as coordinates on a plane, and you can calculate the distance from the origin ((0, 0)
) by using Pythagorean distance formula, sqrt(i**2 + r**2)
.
The distance can be expressed as a floating point (real) number, there is no imaginary component.
It also can’t be an integer, because the Pythagorean distance is not always a convenient whole number (unlike the absolute value of an integer, which can only ever be another integer).
答案 2 :(得分:3)
假设您知道复数的范数的定义,那么您的问题就变成:abs(5j)
为什么5.0
返回5
而不是int
,即使您提供了{{1}作为虚构的组件?
答案是类型一致性。由于abs
为复数返回float
,因此没有理由提出特殊情况,如果输出恰好是一个整数,则返回int
。
另请注意,相同的推理适用于您的虚数的组件,这些组件始终存储为float
。
z = 1 + 1j
z.real # 1.0
z.imag # 1.0
答案 3 :(得分:3)
我认为真正的问题是“为什么Python' abs
返回整数参数的整数值,而复数值的浮点值则返回普通整数值。”
关于abs
的论证和结果类型,有三个主要案例:
abs(-5)
返回一个整数(5)。abs(5.1)
返回一个浮点数(5.1)。在最后一种情况下的这个决定远非微不足道: abs(5 + 0i)有一个整数值,所以有 abs(3 + 4i)(毕达哥拉斯)但 abs(5 + 2i)没有。换句话说,创建一个整数复合体是没有意义的。输入并为其提供abs
实施;在大多数情况下,结果不是整数。
因此,不将整数/实数区分扩展到复数字段是非常明智的。 (它可以用于添加,但实际效益将接近于零。)