summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-complex/mrblib
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2019-05-21 16:11:25 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2019-05-21 21:08:26 +0900
commitfccec8964a1b30cef8ff9d97e0e01f3a348e318b (patch)
tree5ab7345ece768da33547e360be58c4bfd6859c81 /mrbgems/mruby-complex/mrblib
parente941cf06a3e0351107d36d49d540562fdf49f9b4 (diff)
downloadmruby-fccec8964a1b30cef8ff9d97e0e01f3a348e318b.tar.gz
mruby-fccec8964a1b30cef8ff9d97e0e01f3a348e318b.zip
Implements part of `Complex` class in C.
Diffstat (limited to 'mrbgems/mruby-complex/mrblib')
-rw-r--r--mrbgems/mruby-complex/mrblib/complex.rb50
1 files changed, 10 insertions, 40 deletions
diff --git a/mrbgems/mruby-complex/mrblib/complex.rb b/mrbgems/mruby-complex/mrblib/complex.rb
index 8ae743e77..4c0c19c70 100644
--- a/mrbgems/mruby-complex/mrblib/complex.rb
+++ b/mrbgems/mruby-complex/mrblib/complex.rb
@@ -23,43 +23,43 @@ class Complex < Numeric
end
def +@
- Complex(real, imaginary)
+ Complex._new(real, imaginary)
end
def -@
- Complex(-real, -imaginary)
+ Complex._new(-real, -imaginary)
end
def +(rhs)
if rhs.is_a? Complex
- Complex(real + rhs.real, imaginary + rhs.imaginary)
+ Complex._new(real + rhs.real, imaginary + rhs.imaginary)
elsif rhs.is_a? Numeric
- Complex(real + rhs, imaginary)
+ Complex._new(real + rhs, imaginary)
end
end
def -(rhs)
if rhs.is_a? Complex
- Complex(real - rhs.real, imaginary - rhs.imaginary)
+ Complex._new(real - rhs.real, imaginary - rhs.imaginary)
elsif rhs.is_a? Numeric
- Complex(real - rhs, imaginary)
+ Complex._new(real - rhs, imaginary)
end
end
def *(rhs)
if rhs.is_a? Complex
- Complex(real * rhs.real - imaginary * rhs.imaginary, real * rhs.imaginary + rhs.real * imaginary)
+ Complex._new(real * rhs.real - imaginary * rhs.imaginary, real * rhs.imaginary + rhs.real * imaginary)
elsif rhs.is_a? Numeric
- Complex(real * rhs, imaginary * rhs)
+ Complex._new(real * rhs, imaginary * rhs)
end
end
def /(rhs)
if rhs.is_a? Complex
div = rhs.real * rhs.real + rhs.imaginary * rhs.imaginary
- Complex((real * rhs.real + imaginary * rhs.imaginary) / div, (rhs.real * imaginary - real * rhs.imaginary) / div)
+ Complex._new((real * rhs.real + imaginary * rhs.imaginary) / div, (rhs.real * imaginary - real * rhs.imaginary) / div)
elsif rhs.is_a? Numeric
- Complex(real / rhs, imaginary / rhs)
+ Complex._new(real / rhs, imaginary / rhs)
end
end
alias_method :quo, :/
@@ -92,14 +92,6 @@ class Complex < Numeric
end
alias_method :conj, :conjugate
- def numerator
- self
- end
-
- def denominator
- 1
- end
-
def fdiv(numeric)
Complex(real.to_f / numeric, imaginary.to_f / numeric)
end
@@ -117,36 +109,14 @@ class Complex < Numeric
end
alias_method :rect, :rectangular
- def to_c
- self
- end
-
- def to_f
- raise RangeError.new "can't convert #{to_s} into Float" unless imaginary.zero?
- real.to_f
- end
-
- def to_i
- raise RangeError.new "can't convert #{to_s} into Integer" unless imaginary.zero?
- real.to_i
- end
-
def to_r
raise RangeError.new "can't convert #{to_s} into Rational" unless imaginary.zero?
Rational(real, 1)
end
- attr_reader :real, :imaginary
alias_method :imag, :imaginary
end
-class << Complex
- alias_method :_new, :new
- undef_method :new
-
- alias_method :rect, :rectangular
-end
-
module Kernel
def Complex(real, imaginary = 0)
Complex.rectangular(real, imaginary)