'use strict'; var MAX_ITER = 1075; // 1023+52 (subnormals) => BIAS+NUM_SIGNFICAND_BITS-1 var maxBits = 54; // only 53 bits for fraction module.exports = function fractionToBitString(x) { var str = ''; if (x === 0) { return str; } var j = MAX_ITER; var y; // Each time we multiply by 2 and find a ones digit, add a '1'; otherwise, add a '0'.. for (var i = 0; i < MAX_ITER; i += 1) { y = x * 2; if (y >= 1) { x = y - 1; // eslint-disable-line no-param-reassign str += '1'; if (j === MAX_ITER) { j = i; // first 1 } } else { x = y; // eslint-disable-line no-param-reassign str += '0'; } // Stop when we have no more decimals to process or in the event we found a fraction which cannot be represented in a finite number of bits... if (y === 1 || i - j > maxBits) { return str; } } return str; };