'use strict'; 
 | 
// IEEE754 conversions based on https://github.com/feross/ieee754 
 | 
var $Array = Array; 
 | 
var abs = Math.abs; 
 | 
var pow = Math.pow; 
 | 
var floor = Math.floor; 
 | 
var log = Math.log; 
 | 
var LN2 = Math.LN2; 
 | 
  
 | 
var pack = function (number, mantissaLength, bytes) { 
 | 
  var buffer = $Array(bytes); 
 | 
  var exponentLength = bytes * 8 - mantissaLength - 1; 
 | 
  var eMax = (1 << exponentLength) - 1; 
 | 
  var eBias = eMax >> 1; 
 | 
  var rt = mantissaLength === 23 ? pow(2, -24) - pow(2, -77) : 0; 
 | 
  var sign = number < 0 || number === 0 && 1 / number < 0 ? 1 : 0; 
 | 
  var index = 0; 
 | 
  var exponent, mantissa, c; 
 | 
  number = abs(number); 
 | 
  // eslint-disable-next-line no-self-compare -- NaN check 
 | 
  if (number !== number || number === Infinity) { 
 | 
    // eslint-disable-next-line no-self-compare -- NaN check 
 | 
    mantissa = number !== number ? 1 : 0; 
 | 
    exponent = eMax; 
 | 
  } else { 
 | 
    exponent = floor(log(number) / LN2); 
 | 
    c = pow(2, -exponent); 
 | 
    if (number * c < 1) { 
 | 
      exponent--; 
 | 
      c *= 2; 
 | 
    } 
 | 
    if (exponent + eBias >= 1) { 
 | 
      number += rt / c; 
 | 
    } else { 
 | 
      number += rt * pow(2, 1 - eBias); 
 | 
    } 
 | 
    if (number * c >= 2) { 
 | 
      exponent++; 
 | 
      c /= 2; 
 | 
    } 
 | 
    if (exponent + eBias >= eMax) { 
 | 
      mantissa = 0; 
 | 
      exponent = eMax; 
 | 
    } else if (exponent + eBias >= 1) { 
 | 
      mantissa = (number * c - 1) * pow(2, mantissaLength); 
 | 
      exponent += eBias; 
 | 
    } else { 
 | 
      mantissa = number * pow(2, eBias - 1) * pow(2, mantissaLength); 
 | 
      exponent = 0; 
 | 
    } 
 | 
  } 
 | 
  while (mantissaLength >= 8) { 
 | 
    buffer[index++] = mantissa & 255; 
 | 
    mantissa /= 256; 
 | 
    mantissaLength -= 8; 
 | 
  } 
 | 
  exponent = exponent << mantissaLength | mantissa; 
 | 
  exponentLength += mantissaLength; 
 | 
  while (exponentLength > 0) { 
 | 
    buffer[index++] = exponent & 255; 
 | 
    exponent /= 256; 
 | 
    exponentLength -= 8; 
 | 
  } 
 | 
  buffer[index - 1] |= sign * 128; 
 | 
  return buffer; 
 | 
}; 
 | 
  
 | 
var unpack = function (buffer, mantissaLength) { 
 | 
  var bytes = buffer.length; 
 | 
  var exponentLength = bytes * 8 - mantissaLength - 1; 
 | 
  var eMax = (1 << exponentLength) - 1; 
 | 
  var eBias = eMax >> 1; 
 | 
  var nBits = exponentLength - 7; 
 | 
  var index = bytes - 1; 
 | 
  var sign = buffer[index--]; 
 | 
  var exponent = sign & 127; 
 | 
  var mantissa; 
 | 
  sign >>= 7; 
 | 
  while (nBits > 0) { 
 | 
    exponent = exponent * 256 + buffer[index--]; 
 | 
    nBits -= 8; 
 | 
  } 
 | 
  mantissa = exponent & (1 << -nBits) - 1; 
 | 
  exponent >>= -nBits; 
 | 
  nBits += mantissaLength; 
 | 
  while (nBits > 0) { 
 | 
    mantissa = mantissa * 256 + buffer[index--]; 
 | 
    nBits -= 8; 
 | 
  } 
 | 
  if (exponent === 0) { 
 | 
    exponent = 1 - eBias; 
 | 
  } else if (exponent === eMax) { 
 | 
    return mantissa ? NaN : sign ? -Infinity : Infinity; 
 | 
  } else { 
 | 
    mantissa += pow(2, mantissaLength); 
 | 
    exponent -= eBias; 
 | 
  } return (sign ? -1 : 1) * mantissa * pow(2, exponent - mantissaLength); 
 | 
}; 
 | 
  
 | 
module.exports = { 
 | 
  pack: pack, 
 | 
  unpack: unpack 
 | 
}; 
 |