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 );
}