Class: Quadratic::Imag

Inherits:
Quadratic show all
Defined in:
lib/quadratic_number/imag.rb,
lib/quadratic_number.rb

Overview

Abstract class for Quadratic[d] (d < 0).

Instances behave like those of Complex. See #to_c for details of the complex expression.

Instance Method Summary collapse

Methods inherited from Quadratic

#*, #**, #+, #-, #-@, [], #coerce, #denominator, #discriminant, #eql?, #fdiv, #hash, #initialize, #inspect, #norm, #numerator, #qconj, #quo, #trace

Constructor Details

This class inherits a constructor from Quadratic

Instance Method Details

#==(other) ⇒ Boolean

Parameters:

  • other (Object)

Returns:

  • (Boolean)


36
37
38
39
40
41
42
# File 'lib/quadratic_number/imag.rb', line 36

def ==(other)
  if other.kind_of?(Numeric)
    self.to_c - other == 0
  else
    other == self
  end
end

#absReal Also known as: magnitude

Returns:



# File 'lib/quadratic_number/imag.rb', line 135


#argReal Also known as: angle, phase

Returns:



# File 'lib/quadratic_number/imag.rb', line 140


#imagQuadratic[-d] Also known as: imaginary

Returns:



# File 'lib/quadratic_number/imag.rb', line 130


#polar[Real, Real]

Returns:



150
151
152
153
154
# File 'lib/quadratic_number/imag.rb', line 150

[:rect, :real, :imag, :abs, :arg, :polar].each do |sym|
  define_method(sym) do
    to_c.send(sym)
  end
end

#rationalize(eps) ⇒ Rational

Parameters:

  • eps (Numeric)

Returns:

  • (Rational)

Raises:

  • (RangeError)

    if its imaginary part is not zero.



# File 'lib/quadratic_number/imag.rb', line 86


#realInteger/Rational

Returns:

  • (Integer/Rational)


# File 'lib/quadratic_number/imag.rb', line 125


#real?Boolean

Returns false.

Returns:

  • (Boolean)


18
19
20
# File 'lib/quadratic_number/imag.rb', line 18

def real?
  false
end

#rect[Integer/Rational, Quadratic[-d]] Also known as: rectangular

Returns:



# File 'lib/quadratic_number/imag.rb', line 120


#to_cComplex

Returns an equivalent complex. Its imaginary part is usually a Quadratic::Real.

Examples:

Quadratic[-3].new(1, 2)      #=> (1+2√-3)
Quadratic[-3].new(1, 2).to_c #=> (1+(0+2√3)*i)
Quadratic[-1].new(3, 4)      #=> (3+4√-1)
Quadratic[-1].new(3, 4).to_c #=> (3+4i)

Returns:

  • (Complex)


64
65
66
67
68
69
70
71
72
# File 'lib/quadratic_number/imag.rb', line 64

def to_c
  d = self.class::D
  if d == -1
    Complex.rect(@a, @b)
  else
    rev_class = Quadratic[-d]
    Complex.rect(@a, rev_class.new(0, @b))
  end
end

#to_fFloat

Returns:

  • (Float)

Raises:

  • (RangeError)

    if its imaginary part is not zero.



# File 'lib/quadratic_number/imag.rb', line 74


#to_iInteger

Returns:

  • (Integer)

Raises:

  • (RangeError)

    if its imaginary part is not zero.



99
100
101
102
103
104
105
106
107
108
109
110
111
112
# File 'lib/quadratic_number/imag.rb', line 99

{
  :to_f => Float,
  :to_r => Rational,
  :rationalize => Rational,
  :to_i => Integer
}.each do |sym,klass|
  define_method(sym) do |*args|
    if @b != 0
      raise RangeError,
            "can't convert #{self} into #{klass}"
    end
    @a.send(sym, *args)
  end
end

#to_rRational

Returns:

  • (Rational)

Raises:

  • (RangeError)

    if its imaginary part is not zero.



# File 'lib/quadratic_number/imag.rb', line 80