Module: VectorNumber::MathConverting

Included in:
VectorNumber
Defined in:
lib/vector_number/math_converting.rb

Overview

Various mathematical operations that are also conversions.

Instance Method Summary collapse

Instance Method Details

#absFloat Also known as: magnitude

Calculate the absolute value of the vector, i.e. its length.

Examples:

VectorNumber[5.3].abs # => 5.3
VectorNumber[-5.3i].magnitude # => 5.3
VectorNumber[-5.3i, "i"].abs # => 5.3935146240647205

Returns:

  • (Float)

Since:

  • 0.2.2



16
17
18
# File 'lib/vector_number/math_converting.rb', line 16

def abs
  Math.sqrt(abs2)
end

#abs2Float

Calculate the square of absolute value.

Examples:

VectorNumber[5.3].abs2 # => 5.3
VectorNumber[-5.3i].abs2 # => 5.3
VectorNumber[-5.3i, "i"].abs2 # => 29.09

Returns:

  • (Float)

Since:

  • 0.2.2



32
33
34
# File 'lib/vector_number/math_converting.rb', line 32

def abs2
  coefficients.sum(&:abs2)
end

#ceil(digits = 0) ⇒ VectorNumber

Return a new vector with every coefficient rounded using their #ceil.

Examples:

VectorNumber[5.39].ceil # => (6)
VectorNumber[-5.35i].ceil # => (-5i)
VectorNumber[-5.35i, "i"].ceil # => (-5i + 1⋅'i')
VectorNumber[-5.35i, "i"].ceil(1) # => (-5.3i + 1⋅'i')
VectorNumber[-5.35i, "i"].ceil(-1) # => (10⋅'i')

Parameters:

  • digits (Integer) (defaults to: 0)

Returns:

Since:

  • 0.2.2



66
67
68
# File 'lib/vector_number/math_converting.rb', line 66

def ceil(digits = 0)
  new { _1.ceil(digits) }
end

#floor(digits = 0) ⇒ VectorNumber

Return a new vector with every coefficient rounded using their #floor.

Examples:

VectorNumber[5.39].floor # => (5)
VectorNumber[-5.35i].floor # => (-6i)
VectorNumber[-5.35i, "i"].floor # => (-6i + 1⋅'i')
VectorNumber[-5.35i, "i"].floor(1) # => (-5.4i + 1⋅'i')
VectorNumber[-5.35i, "i"].floor(-1) # => (-10i)

Parameters:

  • digits (Integer) (defaults to: 0)

Returns:

Since:

  • 0.2.2



83
84
85
# File 'lib/vector_number/math_converting.rb', line 83

def floor(digits = 0)
  new { _1.floor(digits) }
end

#round(digits = 0, half: :up) ⇒ VectorNumber

Return a new vector with every coefficient rounded using their #round.

Examples:

VectorNumber[-4.5i, "i"].round(half: :up) # => (-5i + 1⋅'i')
VectorNumber[-4.5i, "i"].round(half: :even) # => (-4i + 1⋅'i')
VectorNumber[-5.5i, "i"].round(half: :even) # => (-6i + 1⋅'i')
VectorNumber[-5.5i, "i"].round(half: :down) # => (-5i + 1⋅'i')
VectorNumber[-5.35i, "i"].round(1) # => (-5.4i + 1⋅'i')
VectorNumber[-5.35i, "i"].round(-1) # => (-10i)

Parameters:

  • digits (Integer) (defaults to: 0)
  • half (Symbol, nil) (defaults to: :up)

    one of :up, :down or :even, see Float#round for meaning

Returns:

See Also:

  • Float#round

Since:

  • 0.2.2



105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
# File 'lib/vector_number/math_converting.rb', line 105

def round(digits = 0, half: :up)
  if defined?(BigDecimal)
    bd_mode =
      case half
      when :down then :half_down
      when :even then :half_even
      else :half_up
      end
    new { _1.is_a?(BigDecimal) ? _1.round(digits, bd_mode) : _1.round(digits, half: half) }
  # :nocov:
  else
    new { _1.round(digits, half: half) }
  end
  # :nocov:
end

#truncate(digits = 0) ⇒ VectorNumber

Return a new vector with every coefficient truncated using their #truncate.

Examples:

VectorNumber[5.39].truncate # => (5)
VectorNumber[-5.35i].truncate # => (-5i)
VectorNumber[-5.35i, "i"].truncate # => (-5i + 1⋅'i')
VectorNumber[-5.35i, "i"].truncate(1) # => (-5.3i + 1⋅'i')
VectorNumber[-5.35i, "i"].truncate(-1) # => (0)

Parameters:

  • digits (Integer) (defaults to: 0)

Returns:

Since:

  • 0.2.1



49
50
51
# File 'lib/vector_number/math_converting.rb', line 49

def truncate(digits = 0)
  new { _1.truncate(digits) }
end