double-to-base-2-string
Version:
Turn a number into a human readable binary string
60 lines (57 loc) • 1.21 kB
JavaScript
module.exports = doubleToBase2String
var db = require("double-bits")
var pad = require("pad")
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
}