Module: Flt::Support
- Included in:
- Num
- Defined in:
- lib/flt/support.rb,
lib/flt/support/reader.rb,
lib/flt/support/formatter.rb,
lib/flt/support/flag_values.rb,
lib/flt/support/rationalizer.rb,
lib/flt/support/rationalizer_extra.rb
Defined Under Namespace
Modules: AuxiliarFunctions Classes: FlagValues, Flags, Formatter, InfiniteLoopError, Rationalizer, Reader
Class Method Summary collapse
-
.adjust_digits(dec_pos, digits, options = {}) ⇒ Object
Adjust truncated digits based on the rounding mode (:round_mode option) and on the information about the following digits contained in the :round_up parameter (nil for only zeros, :lo for nonzero values below tie, :tie for a :tie and :hi for nonzero digits over the tie).
-
.Flags(*params) ⇒ Object
Constructor for Flags.
-
.FlagValues(*params) ⇒ Object
Constructor for FlagValues.
-
.simplified_round_mode(round_mode, negative) ⇒ Object
replace :ceiling and :floor rounding modes by :up/:down (depending on sign of the number to be rounded).
Class Method Details
.adjust_digits(dec_pos, digits, options = {}) ⇒ Object
Adjust truncated digits based on the rounding mode (:round_mode option) and on the information about the following digits contained in the :round_up parameter (nil for only zeros, :lo for nonzero values below tie, :tie for a :tie and :hi for nonzero digits over the tie). Other parameters: :negative to consider the number negative, :base the base of the number.
30 31 32 33 34 35 36 37 38 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 67 68 |
# File 'lib/flt/support.rb', line 30 def adjust_digits(dec_pos, digits, ={}) round_mode = [:round_mode] negative = [:negative] round_up = [:round_up] base = [:base] round_mode = simplified_round_mode(round_mode, negative) increment = (round_up && (round_mode != :down)) && ((round_mode == :up) || (round_up == :hi) || ((round_up == :tie) && ((round_mode==:half_up) || ((round_mode==:half_even) && ((digits.last % 2)==1))))) if increment digits = digits.dup # carry = increment ? 1 : 0 # digits = digits.reverse.map{|d| d += carry; d>=base ? 0 : (carry=0;d)}.reverse # if carry != 0 # digits.unshift carry # dec_pos += 1 # end i = digits.size - 1 while i>=0 digits[i] += 1 if digits[i] == base digits[i] = 0 else break end i -= 1 end if i<0 dec_pos += 1 digits.unshift 1 end end [dec_pos, digits] end |
.Flags(*params) ⇒ Object
Constructor for Flags
331 332 333 334 335 336 337 |
# File 'lib/flt/support/flag_values.rb', line 331 def Flags(*params) if params.size==1 && params.first.kind_of?(Flags) params.first else Flags.new(*params) end end |
.FlagValues(*params) ⇒ Object
Constructor for FlagValues
322 323 324 325 326 327 328 |
# File 'lib/flt/support/flag_values.rb', line 322 def FlagValues(*params) if params.size==1 && params.first.kind_of?(FlagValues) params.first else FlagValues.new(*params) end end |
.simplified_round_mode(round_mode, negative) ⇒ Object
replace :ceiling and :floor rounding modes by :up/:down (depending on sign of the number to be rounded)
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/flt/support.rb', line 9 def simplified_round_mode(round_mode, negative) if negative if round_mode == :ceiling round_mode = :floor elsif round_mode == :floor round_mode = :ceiling end end if round_mode == :ceiling round_mode = :up elsif round_mode == :floor round_mode = :down end round_mode end |