Ruby 复数格式化除法

Ruby Complex number formatting Division

puts 5 / Complex(1, 2)

实际输出:

>>> 1/1-2/1i

预期输出:

>>> 1 - 2i

为什么 Ruby 格式化此表达式以使其包含有理数?

当然是这样

5/Complex(1, 2) #=> ((1/1)-(2/1)*i)

相同
(1-2i)

但一般来说,由于复数除法的工作原理1,返回的复数的实部和虚部的结果系数不一定是整数,而是有理数。

例如,假设

c1 = Complex(1,2)
  #=> (1+2i)
c2 = Complex(2,3)
  #=> (2+3i)

并且您希望计算这两个数字的商:

c1/c2
  #=> ((8/13)+(1/13)*i)

结果必然要用有理分量表示。

现在考虑以下操作。

c2 = Complex(3/4r, 5) #=> ((3/4)+5i)
c3 = Complex(2, 5.0)  #=> (2+5.0i)
1 + c1                #=> (2+2i)
1 - c1                #=> (0-2i)
2 * c1                #=> (2+4i)
c1/3                  #=> ((1/3)+(2/3)*i)
2.0 * c1              #=> (2.0+4.0i)
c1 + c2               #=> ((7/4)+7i)
c1 + c2               #=> ((7/4)+7i)
c1 * c1               #=> (-3+4i)
c1 * c2               #=> ((-37/4)+(13/2)*i)
c1 * c3               #=> (-8.0+9.0i)
c2 * c3               #=> (-23.5+13.75i)

可以看出,涉及整数、有理数和浮点数组合的算术运算结果的数据类型规则同样适用于复数的实部和虚部。

1复数除法解释here