module Dydx::Algebra::Set

Public Instance Methods

cos(x) click to toggle source
# File lib/dydx/algebra/set.rb, line 291
def cos(x)
  return Cos.new(x) unless x.multiple_of?(pi) && (x / pi).num?

  radn = (x / pi)
  loop do
    break if radn < 2
    radn -= 2
  end

  case radn
  when 0        then 1
  when _(1) / 2 then 0
  when 1        then -1
  when _(3) / 2 then 0
  else               Cos.new(x)
  end
end
differentiate(_sym = :x) click to toggle source
# File lib/dydx/algebra/set.rb, line 157
def differentiate(_sym = :x)
  e0
end
e() click to toggle source
# File lib/dydx/algebra/set.rb, line 209
def e
  $e ||= E.new
end
e0() click to toggle source
# File lib/dydx/algebra/set.rb, line 197
def e0
  eval('$e0 ||= _(0)')
end
e1() click to toggle source
# File lib/dydx/algebra/set.rb, line 201
def e1
  eval('$e1 ||= _(1)')
end
log(formula) click to toggle source

TODO: Method has too many lines. [13/10]

# File lib/dydx/algebra/set.rb, line 218
def log(formula)
  if formula.formula?(:*)
    f, g = formula.f, formula.g
    log(f) + log(g)
  elsif formula.formula?(:**)
    f, g = formula.f, formula.g
    g * log(f)
  elsif formula.one?
    e0
  elsif formula.is_a?(E)
    e1
  else
    Log.new(formula)
  end
end
log10(formula) click to toggle source
# File lib/dydx/algebra/set.rb, line 253
def log10(formula)
  # TODO: refactor with log function.
  if formula.formula?(:*)
    f, g = formula.f, formula.g
    log10(f) + log10(g)
  elsif formula.formula?(:**)
    f, g = formula.f, formula.g
    g * log10(f)
  elsif formula.one?
    e0
  elsif formula.is_a?(Num)
    (formula.n == 10) ? e1 : log10(formula.n)
  elsif formula == 10
    e1
  else
    Log10.new(formula)
  end
end
log2(formula) click to toggle source
# File lib/dydx/algebra/set.rb, line 234
def log2(formula)
  # TODO: refactor with log function.
  if formula.formula?(:*)
    f, g = formula.f, formula.g
    log2(f) + log2(g)
  elsif formula.formula?(:**)
    f, g = formula.f, formula.g
    g * log2(f)
  elsif formula.one?
    e0
  elsif formula.is_a?(Num)
    (formula.n == 2) ? e1 : log2(formula.n)
  elsif formula == 2
    e1
  else
    Log2.new(formula)
  end
end
oo() click to toggle source
# File lib/dydx/algebra/set.rb, line 213
def oo
  Float::INFINITY
end
pi() click to toggle source
# File lib/dydx/algebra/set.rb, line 205
def pi
  $pi ||= Pi.new
end
sin(x) click to toggle source

TODO: We should negative num

# File lib/dydx/algebra/set.rb, line 273
def sin(x)
  return Sin.new(x) unless x.multiple_of?(pi) && (x / pi).num?

  radn = (x / pi)
  loop do
    break if radn < 2
    radn -= 2
  end

  case radn
  when 0        then 0
  when _(1) / 2 then 1
  when 1        then 0
  when _(3) / 2 then -1
  else               Sin.new(x)
  end
end
subst(_hash = {}) click to toggle source
# File lib/dydx/algebra/set.rb, line 153
def subst(_hash = {})
  self
end
tan(x) click to toggle source
# File lib/dydx/algebra/set.rb, line 309
def tan(x)
  if x == 0
    0
  else
    Tan.new(x)
  end
end
to_s() click to toggle source
# File lib/dydx/algebra/set.rb, line 187
def to_s
  "( #{numerator} / #{denominator} )"
end