index.js
1 /*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */ 2 exports.read = function (buffer, offset, isLE, mLen, nBytes) { 3 var e, m 4 var eLen = (nBytes * 8) - mLen - 1 5 var eMax = (1 << eLen) - 1 6 var eBias = eMax >> 1 7 var nBits = -7 8 var i = isLE ? (nBytes - 1) : 0 9 var d = isLE ? -1 : 1 10 var s = buffer[offset + i] 11 12 i += d 13 14 e = s & ((1 << (-nBits)) - 1) 15 s >>= (-nBits) 16 nBits += eLen 17 for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {} 18 19 m = e & ((1 << (-nBits)) - 1) 20 e >>= (-nBits) 21 nBits += mLen 22 for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {} 23 24 if (e === 0) { 25 e = 1 - eBias 26 } else if (e === eMax) { 27 return m ? NaN : ((s ? -1 : 1) * Infinity) 28 } else { 29 m = m + Math.pow(2, mLen) 30 e = e - eBias 31 } 32 return (s ? -1 : 1) * m * Math.pow(2, e - mLen) 33 } 34 35 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { 36 var e, m, c 37 var eLen = (nBytes * 8) - mLen - 1 38 var eMax = (1 << eLen) - 1 39 var eBias = eMax >> 1 40 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0) 41 var i = isLE ? 0 : (nBytes - 1) 42 var d = isLE ? 1 : -1 43 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0 44 45 value = Math.abs(value) 46 47 if (isNaN(value) || value === Infinity) { 48 m = isNaN(value) ? 1 : 0 49 e = eMax 50 } else { 51 e = Math.floor(Math.log(value) / Math.LN2) 52 if (value * (c = Math.pow(2, -e)) < 1) { 53 e-- 54 c *= 2 55 } 56 if (e + eBias >= 1) { 57 value += rt / c 58 } else { 59 value += rt * Math.pow(2, 1 - eBias) 60 } 61 if (value * c >= 2) { 62 e++ 63 c /= 2 64 } 65 66 if (e + eBias >= eMax) { 67 m = 0 68 e = eMax 69 } else if (e + eBias >= 1) { 70 m = ((value * c) - 1) * Math.pow(2, mLen) 71 e = e + eBias 72 } else { 73 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen) 74 e = 0 75 } 76 } 77 78 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {} 79 80 e = (e << mLen) | m 81 eLen += mLen 82 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {} 83 84 buffer[offset + i - d] |= s * 128 85 }