function hi(n) { if(doubleBits.denormalized(n)) { return -(1023 + lz(doubleBits.fraction(n))) } else { return doubleBits.exponent(n) } }
function doubleToBase2String(n) { if(n === Infinity) { return "∞" } else if(n === -Infinity) { return "-∞" } else if(isNaN(n)) { return "NaN" } var sign = db.sign(n) if(n === 0) { if(sign) { return "-0" } else { return "0" } } else if(n === 1) { return "1" } else if(n === -1) { return "-1" } var exponent = db.exponent(n) var fraction = db.fraction(n) var b0 = pad(fraction[0].toString(2), 32, "0") var b1 = fraction[1].toString(2) var str = b1 + b0 if(db.denormalized(n)) { if(!fraction[1]) { str = fraction[0].toString(2) } exponent = -1023 - (52 - str.length) } var nz = str.length-1 while(nz >= 0 && str.charAt(nz) === "0") { nz -= 1 } str = str.substr(0, nz+1) if(str.length > 1) { str = (sign ? "-" : "") + "1." + str.substr(1) if(exponent) { if(exponent === 1) { str += "*2" } else { str += "*2^" + exponent } } } else { str = (sign ? "-" : "") + "2" if(exponent !== 1) { str += "^" + exponent } } return str }
function floatToBigNum(a) { var fa = db.fraction(a) var ea = db.exponent(a) var na = BN(fa[0]&((1<<24)-1)) na = na.add(BN(fa[0]>>>24).ishln(24)) na = na.add(BN(fa[1]).ishln(32)) if(!db.denormalized(a)) { na.ishln(ea+1022) } if(a < 0) { return na.neg() } return na }
function lo(n) { var e = doubleBits.exponent(n) var f = doubleBits.fraction(n) var z = tz(f) return e - (52 - z) }