class Flt::DPDFormat
DPD (Densely-Packed-Decimal) formats
Public Class Methods
define(params)
click to toggle source
The field that need to be defined (with lenghts given in decimal digits) are
-
:sign
-
:combination
-
:exponent_continuation
-
:significand_continuation
Calls superclass method
Flt::FormatBase::define
# File lib/float-formats/classes.rb, line 1295 def self.define(params) @splitted_fields_supported = false define_fields params[:fields] @internal_field_lengths = @field_lengths @internal_field_meaning = @field_meaning @internal_fields = @fields raise "Unsupported DPD format" unless @internal_fields[:combination]==5 && @internal_fields[:sign]==1 && [0,4,7].include?(@internal_fields[:significand_continuation]%10) @exponent_bits = 2 + @internal_fields[:exponent_continuation] extra_bits = (@internal_fields[:significand_continuation] % 10) extra_digits = (extra_bits==0) ? 0 : ((extra_bits==4) ? 1 : 2) @significand_digits = 1 + 3*(@internal_fields[:significand_continuation]/10) + extra_digits define_fields [:type,1,:sign,1,:exponent,@exponent_bits,:significand,@significand_digits] if params[:bias].nil? params[:bias_mode] = :scientific_significand @exp_limit = 3*(2**@internal_fields[:exponent_continuation])-1 params[:max_exp] = @exp_limit/2 params[:min_exp] = -params[:max_exp] params[:max_exp] += 1 if (@exp_limit%2)==1 params[:bias]= -params[:min_exp] end super params end