module Flt::IEEE
Helper methods to define IEEE
754r formats
Public Class Methods
binary(name, parameters)
click to toggle source
Define an IEEE
binary format by passing parameters in a hash; :significand and :exponent are used to defined the fields, optional parameters may follow.
# File lib/float-formats/formats.rb, line 19 def self.binary(name, parameters) significand_bits = parameters[:significand] exponent_bits = parameters[:exponent] Flt.define(name, { base: BinaryFormat, fields: [:significand, significand_bits, :exponent, exponent_bits, :sign, 1], bias: 2**(exponent_bits-1)-1, bias_mode: :scientific_significand, hidden_bit: true, endianness: :little_endian, round: :half_even, gradual_underflow: true, infinity: true, nan: true }.merge(parameters) ) end
decimal(name,parameters)
click to toggle source
Define an IEEE
decimal format by passing parameters in a hash; :significand and :exponent are used to defined the fields, optional parameters may follow.
# File lib/float-formats/formats.rb, line 47 def self.decimal(name,parameters) significand_continuation_bits = parameters[:significand] exponent_continuation_bits = parameters[:exponent] Flt.define(name, { base: DPDFormat, fields: [:significand_continuation, significand_continuation_bits, :exponent_continuation, exponent_continuation_bits, :combination, 5, :sign, 1], normalized: false, endianness: :big_endian, gradual_underflow: true, infinity: true, nan: true, round: :half_even }.merge(parameters)) end
interchange_binary(name,width_in_bits, options={})
click to toggle source
Define an IEEE
binary interchange format given its width in bits
# File lib/float-formats/formats.rb, line 36 def self.interchange_binary(name,width_in_bits, options={}) unless (width_in_bits%32)==0 && (width_in_bits/32)>=4 raise "Invalid IEEE binary interchange format definition: size (#{width_in_bits}) is not valid" end p = width_in_bits - (4*Math.log(width_in_bits)/Math.log(2)).round.to_i + 13 binary(name, { significand: p-1, exponent: width_in_bits-p }.merge(options)) end
interchange_decimal(name,width_in_bits, options={})
click to toggle source
Define an IEEE
decimal interchange format given its width in bits
# File lib/float-formats/formats.rb, line 62 def self.interchange_decimal(name,width_in_bits, options={}) raise "Invalid IEEE decimal interchange format definition: size (#{width_in_bits}) is not valid" unless (width_in_bits%32)==0 p = width_in_bits*9/32 - 2 t = (p-1)*10/3 w = width_in_bits - t - 6 decimal(name,{ significand: t, exponent: w }.merge(options)) end