class DualNumber

Constants

VERSION

Attributes

dual[RW]
real[RW]

Public Class Methods

new(real:, dual:) click to toggle source
# File lib/dual_number.rb, line 5
def initialize(real:, dual:)
  self.real = real
  self.dual = dual
end

Public Instance Methods

*(argument) click to toggle source
# File lib/dual_number.rb, line 38
def *(argument)
  with_dual_number(argument) do |other|
    DualNumber.new \
      real: real * other.real,
      dual: real * other.dual + dual * other.real
  end
end
**(power) click to toggle source
# File lib/dual_number.rb, line 58
def **(power)
  DualNumber.new \
    real: real ** power,
    dual: power * dual * (real ** (power - 1))
end
+(argument) click to toggle source
# File lib/dual_number.rb, line 22
def +(argument)
  with_dual_number(argument) do |other|
    DualNumber.new \
      real: real + other.real,
      dual: dual + other.dual
  end
end
-(argument) click to toggle source
# File lib/dual_number.rb, line 30
def -(argument)
  with_dual_number(argument) do |other|
    DualNumber.new \
      real: real - other.real,
      dual: dual - other.dual
  end
end
-@() click to toggle source
# File lib/dual_number.rb, line 54
def -@
  self * -1
end
/(argument) click to toggle source
# File lib/dual_number.rb, line 46
def /(argument)
  with_dual_number(argument) do |other|
    DualNumber.new \
      real: real / other.real,
      dual: (dual * other.real - real * other.dual) / (other.real * other.real)
  end
end
==(other) click to toggle source
# File lib/dual_number.rb, line 18
def ==(other)
  other.instance_of?(DualNumber) && [real, dual] == [other.real, other.dual]
end
coerce(other) click to toggle source
# File lib/dual_number.rb, line 64
def coerce(other)
  [DualNumber(other), self]
end
inspect() click to toggle source
# File lib/dual_number.rb, line 14
def inspect
  "(#{to_s})"
end
to_s() click to toggle source
# File lib/dual_number.rb, line 10
def to_s
  [real, (dual < 0 ? '-' : '+'), dual.abs, 'ε'].join
end

Private Instance Methods

with_dual_number(argument) { |DualNumber(argument)| ... } click to toggle source
# File lib/dual_number.rb, line 70
def with_dual_number(argument)
  yield DualNumber(argument)
end