node package manager

double-bits

double-bits

Routines for manipulating binary representations of a IEEE 754 double precision numbers.

testling badge

build status

Example

var db = require("double-bits")
 
//Get higher order word 
console.log(db.hi(1.0).toString(16))    //Prints out: 3ff00000 
 
//Get lower order word 
console.log(db.lo(1.0).toString(16))    //Prints out: 0 
 
//Combine two words into a double 
console.log(db.pack(0, 0x3ff00000))     //Prints out: 1.0 
 
//More sophisticated example:  Print out base 2 representation 
var pad = require("pad")
function base2Str(n) {
  var f = db.fraction(n)
  return (db.sign(n) ? "-" : "") +
    "2^" + (db.exponent(n)+1) +
    " * 0." + pad(f[1].toString(2), 20, "0") + 
              pad(f[0].toString(2), 32, "0")
}
console.log(base2Str(1.0))
//Prints out: 
// 
//   2^1 * 0.10000000000000000000000000000000000000000000000000000 
// 

Install

npm install double-bits

API

var db = require("double-bits")

db(n)

Returns a pair of 32-bit unsigned ints encoding the lower/higher order words respectively representing n

  • n is an IEEE754 double number

Returns An array, [lo,hi] encoding n

db.lo(n)

Returns the lower order word of n

  • n is an IEEE754 number

Returns The lower order word of n

db.hi(n)

Returns the higher order word of n

  • n is an IEEE754 number

Returns The higher order word of n

db.pack(lo, hi)

Given a pair of lower/higher order words, concatenate them into a 64 bit double precision number

  • lo is the lower order word
  • hi is the higher order word

Returns An IEEE754 double precision number formed by concatenating the bits of lo and hi

db.sign(n)

Returns the state of the sign bit of n

  • n is an IEEE754 double precision number

Returns The sign bit of n

db.exponent(n)

Returns the exponent of n

  • n is an IEEE754 double precision number

Returns The exponent of n

db.fraction(n)

Returns the fractional part of n

  • n is an IEEE754 double precision number

Returns The fractional part of n encoded as a pair of numbers, [lo,hi] where lo is a 32 bit integer and hi is a 21 bit integer.

db.denormalized(n)

Test if a double is denormalized.

  • n is a number

Returns true if n is denormal, false otherwise

Credits

(c) 2014 Mikola Lysenko. BSD License