Class: ProbabilityToFriendlyString::FriendlyProbability
- Inherits:
-
Object
- Object
- ProbabilityToFriendlyString::FriendlyProbability
- Includes:
- Comparable
- Defined in:
- lib/probability_to_friendly_string.rb
Constant Summary collapse
- @@fractionsData =
nil
Instance Attribute Summary collapse
-
#denominator ⇒ Object
readonly
Returns the value of attribute denominator.
-
#friendlyString ⇒ Object
readonly
Returns the value of attribute friendlyString.
-
#numerator ⇒ Object
readonly
Returns the value of attribute numerator.
Class Method Summary collapse
- ._addFraction(fractionsData, numerator, denominator) ⇒ Object
- ._createFractionsData ⇒ Object
- .fromProbability(f) ⇒ Object
Instance Method Summary collapse
- #<=>(another_friendly_string) ⇒ Object
-
#initialize(numerator, denominator, friendlyString = nil) ⇒ FriendlyProbability
constructor
A new instance of FriendlyProbability.
- #to_s ⇒ Object
Constructor Details
#initialize(numerator, denominator, friendlyString = nil) ⇒ FriendlyProbability
Returns a new instance of FriendlyProbability.
7 8 9 10 11 12 13 14 15 |
# File 'lib/probability_to_friendly_string.rb', line 7 def initialize(numerator, denominator, friendlyString = nil) @numerator = numerator @denominator = denominator if friendlyString @friendlyString = friendlyString else @friendlyString = "%d in %d" % [numerator, denominator] end end |
Instance Attribute Details
#denominator ⇒ Object (readonly)
Returns the value of attribute denominator.
4 5 6 |
# File 'lib/probability_to_friendly_string.rb', line 4 def denominator @denominator end |
#friendlyString ⇒ Object (readonly)
Returns the value of attribute friendlyString.
4 5 6 |
# File 'lib/probability_to_friendly_string.rb', line 4 def friendlyString @friendlyString end |
#numerator ⇒ Object (readonly)
Returns the value of attribute numerator.
4 5 6 |
# File 'lib/probability_to_friendly_string.rb', line 4 def numerator @numerator end |
Class Method Details
._addFraction(fractionsData, numerator, denominator) ⇒ Object
17 18 19 |
# File 'lib/probability_to_friendly_string.rb', line 17 def self._addFraction(fractionsData, numerator, denominator) fractionsData << [numerator.to_f/denominator, numerator, denominator] end |
._createFractionsData ⇒ Object
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/probability_to_friendly_string.rb', line 20 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) ⇒ Object
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/probability_to_friendly_string.rb', line 39 def self.fromProbability(f) if f < 0 or f > 1 raise RangeError, "f is less than 0 or greater than 1" end if f == 0 return FriendlyProbability.new 0, 1 elsif f == 1 return FriendlyProbability.new 1, 1 elsif f > 0.99 return FriendlyProbability.new 99, 100, ">99 in 100" elsif f < 0.01 return FriendlyProbability.new 1, 100, "<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] else return FriendlyProbability.new @@fractionsData[right][1], @@fractionsData[right][2] end end |
Instance Method Details
#<=>(another_friendly_string) ⇒ Object
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/probability_to_friendly_string.rb', line 72 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.friendlyString < another_friendly_string.friendlyString -1 elsif self.friendlyString > another_friendly_string.friendlyString 1 else 0 end end |
#to_s ⇒ Object
68 69 70 |
# File 'lib/probability_to_friendly_string.rb', line 68 def to_s return "#{@numerator}/#{@denominator} (text: \"#{@friendlyString}\")" end |