MCPcopy Create free account
hub / github.com/chronoxor/FastBinaryEncoding / ieee754write

Function ieee754write

projects/JavaScript/proto/ieee754.js:64–114  ·  view source on GitHub ↗
(buffer, offset, value, isLE, mLen, nBytes)

Source from the content-addressed store, hash-verified

62 * @param {!number} nBytes Value size in bytes (float = 4; double = 8)
63 */
64let ieee754write = function (buffer, offset, value, isLE, mLen, nBytes) {
65 let e, m, c
66 let eLen = (nBytes * 8) - mLen - 1
67 let eMax = (1 << eLen) - 1
68 let eBias = eMax >> 1
69 let rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
70 let i = isLE ? 0 : (nBytes - 1)
71 let d = isLE ? 1 : -1
72 let s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
73
74 value = Math.abs(value)
75
76 if (isNaN(value) || value === Infinity) {
77 m = isNaN(value) ? 1 : 0
78 e = eMax
79 } else {
80 e = Math.floor(Math.log(value) / Math.LN2)
81 if (value * (c = Math.pow(2, -e)) < 1) {
82 e--
83 c *= 2
84 }
85 if (e + eBias >= 1) {
86 value += rt / c
87 } else {
88 value += rt * Math.pow(2, 1 - eBias)
89 }
90 if (value * c >= 2) {
91 e++
92 c /= 2
93 }
94
95 if (e + eBias >= eMax) {
96 m = 0
97 e = eMax
98 } else if (e + eBias >= 1) {
99 m = ((value * c) - 1) * Math.pow(2, mLen)
100 e = e + eBias
101 } else {
102 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
103 e = 0
104 }
105 }
106
107 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8);
108
109 e = (e << mLen) | m
110 eLen += mLen
111 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8);
112
113 buffer[offset + i - d] |= s * 128
114}
115
116exports.ieee754write = ieee754write

Callers 2

writeFloatMethod · 0.85
writeDoubleMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected