fromInt64Bytes

Convert a signed 64-bit integer byte array to a double-precision floating-point number.

Usage

var fromInt64Bytes = require( '@stdlib/number/float64/base/from-int64-bytes' );

fromInt64Bytes( bytes, stride, offset )

Converts a signed 64-bit integer byte array to a double-precision floating-point number.

var Uint8Array = require( '@stdlib/array/uint8' );

var bytes = new Uint8Array( [ 255, 255, 255, 255, 255, 255, 255, 255 ] );
var out = fromInt64Bytes( bytes, 1, 0 );
// returns -1.0

The function supports providing a stride and an index offset for indexing into a provided byte array.

var Uint8Array = require( '@stdlib/array/uint8' );

var bytes = new Uint8Array( [ 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255 ] );
var out = fromInt64Bytes( bytes, 2, 1 );
// returns -1.0

Notes

  • The function assumes host byte order (endianness).

Examples

var IS_LITTLE_ENDIAN = require( '@stdlib/assert/is-little-endian' );
var discreteUniform = require( '@stdlib/random/base/discrete-uniform' );
var bernoulli = require( '@stdlib/random/base/bernoulli' );
var Uint8Array = require( '@stdlib/array/uint8' );
var fromInt64Bytes = require( '@stdlib/number/float64/base/from-int64-bytes' );

var bytes;
var sgn;
var x;
var b;
var s;
var i;
var j;
var k;

bytes = new Uint8Array( 8 );
if ( IS_LITTLE_ENDIAN ) {
    k = 0;
    s = 1;
} else {
    k = 7;
    s = -1;
}
// Generate random integer-valued doubles on the interval (-2^16, 2^16)...
for ( i = 0; i < 10; i++ ) {
    // Determine the sign:
    sgn = ( bernoulli( 0.5 ) ) ? 0 : 128; // 2^7

    // Set a subset of individual (lower-order) bytes:
    for ( j = 0; j < 2; j++ ) {
        b = discreteUniform( 0, 255 ); // 2^8-1
        bytes[ k+(j*s) ] = b;
    }
    // Set higher-order bytes using two's complement:
    for ( j = 2; j < 8; j++ ) {
        bytes[ k+(j*s) ] = ( sgn ) ? 255 : 0; // 2^8-1
    }
    // Convert the bytes to a double:
    x = fromInt64Bytes( bytes, 1, 0 );
    console.log( bytes + ' => ' + x );
}
Did you find this page helpful?