class FinancialMath::GeometricProgression

Attributes

initial_value[R]
ratio[R]
times[R]

Public Class Methods

new(args) click to toggle source
# File lib/financial_math/geometric_progression.rb, line 5
def initialize(args)
  @initial_value = args.fetch(:initial_value, 1)
  @ratio = args.fetch(:ratio, 0)
  @times = args.fetch(:times, 1)
end

Public Instance Methods

infinite_decreasing_sum() click to toggle source
# File lib/financial_math/geometric_progression.rb, line 25
def infinite_decreasing_sum
  initial_value / (1 - ratio)
end
last_item() click to toggle source
# File lib/financial_math/geometric_progression.rb, line 11
def last_item
  (initial_value * ratio**(times - 1)).round(2)
end
sum() click to toggle source
# File lib/financial_math/geometric_progression.rb, line 15
def sum
  if ratio > 1
    growing_progression
  elsif ratio < 1
    decreasing_progression
  elsif ratio == 1
    raise ZeroDivisionError, "ratio can't be equal to one"
  end
end

Private Instance Methods

decreasing_progression() click to toggle source
# File lib/financial_math/geometric_progression.rb, line 35
def decreasing_progression
  (initial_value * (1.0 - ratio**times) / (1.0 - ratio)).round(2)
end
growing_progression() click to toggle source
# File lib/financial_math/geometric_progression.rb, line 31
def growing_progression
  (initial_value * (ratio**times - 1.0) / (ratio - 1.0)).round(2)
end