class SeasidesFraction::Fraction
Fraction
represents a rational number. The usual mathematical operations (+, -, *, /) work, as well as getting the negative value and the inverse.
Constants
- NAN
Attributes
denominator[R]
numerator[R]
Public Class Methods
[](numerator = 0, denominator = 1)
click to toggle source
# File lib/seasides_fraction.rb, line 26 def self.[](numerator = 0, denominator = 1) new(numerator, denominator) end
new(numerator = 0, denominator = 1)
click to toggle source
# File lib/seasides_fraction.rb, line 30 def initialize(numerator = 0, denominator = 1) if denominator.zero? @nominator = @denominator = NAN.numerator, NAN.denominator else normalize(denominator, numerator) end end
zero()
click to toggle source
# File lib/seasides_fraction.rb, line 22 def self.zero new(0, 1) end
Public Instance Methods
*(other)
click to toggle source
# File lib/seasides_fraction.rb, line 73 def *(other) self.class[numerator * other.numerator, denominator * other.denominator] end
+(other)
click to toggle source
# File lib/seasides_fraction.rb, line 60 def +(other) gcd = denominator.gcd other.denominator self.class.new(numerator * (other.denominator / gcd) + other.numerator * (denominator / gcd), (denominator * other.denominator) / gcd) end
-(other)
click to toggle source
# File lib/seasides_fraction.rb, line 65 def -(other) self + -other end
-@()
click to toggle source
# File lib/seasides_fraction.rb, line 69 def -@ self.class.new(-numerator, denominator) end
/(other)
click to toggle source
# File lib/seasides_fraction.rb, line 77 def /(other) return NAN if other.zero? self * other.invert end
==(other)
click to toggle source
# File lib/seasides_fraction.rb, line 56 def ==(other) numerator == other.numerator && denominator == other.denominator end
invert()
click to toggle source
# File lib/seasides_fraction.rb, line 87 def invert self.class.new(denominator, numerator) end
normalize(denominator, numerator)
click to toggle source
# File lib/seasides_fraction.rb, line 38 def normalize(denominator, numerator) gcd = numerator.gcd denominator @numerator = numerator / gcd @denominator = denominator / gcd normalize_sign end
normalize_sign()
click to toggle source
# File lib/seasides_fraction.rb, line 45 def normalize_sign return unless @denominator.negative? @denominator = -@denominator @numerator = -@numerator end
to_s()
click to toggle source
# File lib/seasides_fraction.rb, line 52 def to_s "#{numerator} / #{denominator}" end
zero?()
click to toggle source
# File lib/seasides_fraction.rb, line 83 def zero? self == self.class.zero end