source: imaps-frontend/node_modules/es-abstract/helpers/bytesAsFloat64.js

main
Last change on this file was d565449, checked in by stefan toskovski <stefantoska84@…>, 4 weeks ago

Update repo after prototype presentation

  • Property mode set to 100644
File size: 1.5 KB
RevLine 
[d565449]1'use strict';
2
3var GetIntrinsic = require('get-intrinsic');
4
5var $pow = GetIntrinsic('%Math.pow%');
6
7module.exports = function bytesAsFloat64(rawBytes) {
8 // return new $Float64Array(new $Uint8Array(rawBytes).buffer)[0];
9
10 /*
11 Let value be the byte elements of rawBytes concatenated and interpreted as a little-endian bit string encoding of an IEEE 754-2008 binary64 value.
12If value is an IEEE 754-2008 binary64 NaN value, return the NaN Number value.
13Return the Number value that corresponds to value.
14 */
15 var sign = rawBytes[7] & 0x80 ? -1 : 1; // first bit
16 var exponent = ((rawBytes[7] & 0x7F) << 4) // 7 bits from index 7
17 | ((rawBytes[6] & 0xF0) >> 4); // 4 bits from index 6
18 var mantissa = ((rawBytes[6] & 0x0F) * 0x1000000000000) // 4 bits from index 6
19 + (rawBytes[5] * 0x10000000000) // 8 bits from index 5
20 + (rawBytes[4] * 0x100000000) // 8 bits from index 4
21 + (rawBytes[3] * 0x1000000) // 8 bits from index 3
22 + (rawBytes[2] * 0x10000) // 8 bits from index 2
23 + (rawBytes[1] * 0x100) // 8 bits from index 1
24 + rawBytes[0]; // 8 bits from index 0
25
26 if (exponent === 0 && mantissa === 0) {
27 return sign * 0;
28 }
29 if (exponent === 0x7FF && mantissa !== 0) {
30 return NaN;
31 }
32 if (exponent === 0x7FF && mantissa === 0) {
33 return sign * Infinity;
34 }
35
36 exponent -= 1023; // subtract the bias
37
38 // Handle subnormal numbers
39 if (exponent === -1023) {
40 return sign * mantissa * 5e-324; // $pow(2, -1022 - 52)
41 }
42
43 return sign * (1 + (mantissa / 0x10000000000000)) * $pow(2, exponent);
44};
Note: See TracBrowser for help on using the repository browser.