Ruby 复数格式化师

标签 ruby complex-numbers

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)

您可以看到,涉及整数、有理数和 float 组合的算术运算所产生的数据类型规则同样适用于复数的实部和虚部。

1 复数除法解释here

关于Ruby 复数格式化师,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45664973/

相关文章:

python - 如何使用python从文件中读取复数

ruby - rake 使用的 Gem 路径与 OS X 上的系统路径不同

ruby - 使用 ruby​​ 制作闪烁的控制台消息

CMPLX 使用 GCC 产生 undefined symbol

C# DLLImport 'Complex' 数组返回和参数

python - 如何向数组添加新的复数值?

ruby - 如何转义 gsub 替换字符串中的反向引用

ruby-on-rails - minitest、test::unit 和 rails

ruby - 我如何模块化 Rails 模型?

c++ - Rcpp:如何将复数从 R 传递到 cpp