puts 5 / Complex(1, 2)
实际输出:
>>> 1/1-2/1i
预期产出:
>>> 1 - 2i
为什么Ruby格式化这个表达式,使其包含有理数?
答案 0 :(得分:4)
当然,这是真的
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