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

main
Last change on this file since 79a0317 was 79a0317, checked in by stefan toskovski <stefantoska84@…>, 3 days ago

F4 Finalna Verzija

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