exports.readIEEE754 = function (buffer, offset, isBE, mLen, nBytes){ var e, m, eLen = nBytes * 8 - mLen - 1, eMax = (1 << eLen) - 1, eBias = eMax >> 1, nBits = -7, i = isBE? 0: (nBytes - 1), d = isBE? 1: -1, s = buffer[offset + i]; i += d; e = s & ((1 << (- nBits)) - 1); s >>= (- nBits); nBits += eLen; for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8); m = e & ((1 << (- nBits)) - 1); e >>= (- nBits); nBits += mLen; for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8); if (e === 0) { e = 1 - eBias; } else if (e === eMax) { return m? NaN: ((s? -1: 1) * Infinity); } else { m = m + Math.pow(2, mLen); e = e - eBias; } return (s? -1: 1) * m * Math.pow(2, e - mLen); } ; exports.writeIEEE754 = function (buffer, value, offset, isBE, mLen, nBytes){ var e, m, c, eLen = nBytes * 8 - mLen - 1, eMax = (1 << eLen) - 1, eBias = eMax >> 1, rt = (mLen === 23? Math.pow(2, -24) - Math.pow(2, -77): 0), i = isBE? (nBytes - 1): 0, d = isBE? -1: 1, s = value < 0 || (value === 0 && 1 / value < 0)? 1: 0; value = Math.abs(value); if (isNaN(value) || value === Infinity) { m = isNaN(value)? 1: 0; e = eMax; } else { e = Math.floor(Math.log(value) / Math.LN2); if (value * (c = Math.pow(2, - e)) < 1) { e-- ; c *= 2; } if (e + eBias >= 1) { value += rt / c; } else { value += rt * Math.pow(2, 1 - eBias); } if (value * c >= 2) { e++ ; c /= 2; } if (e + eBias >= eMax) { m = 0; e = eMax; } else if (e + eBias >= 1) { m = (value * c - 1) * Math.pow(2, mLen); e = e + eBias; } else { m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen); e = 0; } } for (; mLen >= 8; buffer[offset + i] = m & 255, i += d, m /= 256, mLen -= 8); e = (e << mLen) | m; eLen += mLen; for (; eLen > 0; buffer[offset + i] = e & 255, i += d, e /= 256, eLen -= 8); buffer[offset + i - d] |= s * 128; } ;