class ProbabilityToFriendlyString::FriendlyProbability
Represents probability represented in a friendly manner.
Attributes
denominator[R]
friendlyDescription[R]
friendlyString[R]
numerator[R]
Public Class Methods
_addFraction(fractionsData, numerator, denominator)
click to toggle source
# File lib/probability_to_friendly_string.rb, line 37 def self._addFraction(fractionsData, numerator, denominator) fractionsData << [numerator.to_f/denominator, numerator, denominator] end
_createFractionsData()
click to toggle source
# File lib/probability_to_friendly_string.rb, line 40 def self._createFractionsData if @@fractionsData return end fractionsData = [] (2..10).each do |d| (1..d).each do |n| if n.gcd(d) == 1 _addFraction(fractionsData, n, d) end end end [12, 15, 20, 30, 40, 50, 60, 80, 100].each do |d| _addFraction(fractionsData, 1, d) _addFraction(fractionsData, d - 1, d) end @@fractionsData = fractionsData.sort end
fromProbability(f)
click to toggle source
Creates a FriendlyProbability
from a double
@param f [Numeric] a probability between 0 and 1 @return [FriendlyProbability] a FriendlyProbability
that is closest to f
# File lib/probability_to_friendly_string.rb, line 63 def self.fromProbability(f) if f < 0 or f > 1 raise RangeError, "f is less than 0 or greater than 1" end # index of the least element > f index = @@friendlyDescriptionValues.bsearch_index {|x| x > f} if index.nil? index = @@friendlyDescriptionStrings.length - 1 end friendlyDescription = @@friendlyDescriptionStrings[index] if f == 0 return FriendlyProbability.new 0, 1, friendlyDescription elsif f == 1 return FriendlyProbability.new 1, 1, friendlyDescription elsif f > 0.99 return FriendlyProbability.new 99, 100, friendlyDescription, ">99 in 100" elsif f < 0.01 return FriendlyProbability.new 1, 100, friendlyDescription, "<1 in 100" end FriendlyProbability._createFractionsData # index of the least element > f right = @@fractionsData.bsearch_index {|x| x[0] > f} if right left = right - 1 else left = @@fractionsData.length - 1 end if (left == (@@fractionsData.length - 1) or (left >= 0 and f - @@fractionsData[left][0] < @@fractionsData[right][0] - f)) return FriendlyProbability.new @@fractionsData[left][1], @@fractionsData[left][2], friendlyDescription else return FriendlyProbability.new @@fractionsData[right][1], @@fractionsData[right][2], friendlyDescription end end
new(numerator, denominator, friendlyDescription, friendlyString = nil)
click to toggle source
# File lib/probability_to_friendly_string.rb, line 26 def initialize(numerator, denominator, friendlyDescription, friendlyString = nil) @numerator = numerator @denominator = denominator @friendlyDescription = friendlyDescription if friendlyString @friendlyString = friendlyString else @friendlyString = "%d in %d" % [numerator, denominator] end end
Public Instance Methods
<=>(another_friendly_string)
click to toggle source
# File lib/probability_to_friendly_string.rb, line 102 def <=>(another_friendly_string) if self.numerator < another_friendly_string.numerator -1 elsif self.numerator > another_friendly_string.numerator 1 end if self.denominator < another_friendly_string.denominator -1 elsif self.denominator > another_friendly_string.denominator 1 end if self.friendlyDescription < another_friendly_string.friendlyDescription -1 elsif self.friendlyDescription > another_friendly_string.friendlyDescription 1 end if self.friendlyString < another_friendly_string.friendlyString -1 elsif self.friendlyString > another_friendly_string.friendlyString 1 else 0 end end
to_s()
click to toggle source
# File lib/probability_to_friendly_string.rb, line 98 def to_s return "#{@numerator}/#{@denominator} (text: \"#{@friendlyString}\", description: \"#{@friendlyDescription}\")" end