1 /*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */
2 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
4 var eLen = (nBytes * 8) - mLen - 1
5 var eMax = (1 << eLen) - 1
8 var i = isLE ? (nBytes - 1) : 0
10 var s = buffer[offset + i]
14 e = s & ((1 << (-nBits)) - 1)
17 for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}
19 m = e & ((1 << (-nBits)) - 1)
22 for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}
26 } else if (e === eMax) {
27 return m ? NaN : ((s ? -1 : 1) * Infinity)
29 m = m + Math.pow(2, mLen)
32 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
35 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
37 var eLen = (nBytes * 8) - mLen - 1
38 var eMax = (1 << eLen) - 1
40 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
41 var i = isLE ? 0 : (nBytes - 1)
43 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
45 value = Math.abs(value)
47 if (isNaN(value) || value === Infinity) {
48 m = isNaN(value) ? 1 : 0
51 e = Math.floor(Math.log(value) / Math.LN2)
52 if (value * (c = Math.pow(2, -e)) < 1) {
59 value += rt * Math.pow(2, 1 - eBias)
66 if (e + eBias >= eMax) {
69 } else if (e + eBias >= 1) {
70 m = ((value * c) - 1) * Math.pow(2, mLen)
73 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
78 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
82 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
84 buffer[offset + i - d] |= s * 128