From Words
Create a double-precision floating-point number from a higher order word and a lower order word.
Usage
var fromWords = require( '@stdlib/number/float64/base/from-words' );
fromWords( high, low )
Creates a double-precision floating-point number from a higher order word (unsigned 32-bit integer
) and a lower order word (unsigned 32-bit integer
).
var v = fromWords( 1774486211, 2479577218 );
// returns 3.14e201
v = fromWords( 3221823995, 1413754136 );
// returns -3.141592653589793
v = fromWords( 0, 0 );
// returns 0.0
v = fromWords( 2147483648, 0 );
// returns -0.0
v = fromWords( 2146959360, 0 );
// returns NaN
v = fromWords( 2146435072, 0 );
// returns Infinity
v = fromWords( 4293918720, 0 );
// returns -Infinity
Notes
- For more information regarding higher and lower order words, see to-words.
Examples
var randu = require( '@stdlib/random/base/randu' );
var round = require( '@stdlib/math/base/special/round' );
var MAX_UINT32 = require( '@stdlib/constants/uint32/max' );
var fromWords = require( '@stdlib/number/float64/base/from-words' );
var high;
var low;
var x;
var i;
for ( i = 0; i < 100; i++ ) {
high = round( randu()*MAX_UINT32 );
low = round( randu()*MAX_UINT32 );
x = fromWords( high, low );
console.log( 'higher: %d. lower: %d. float: %d.', high, low, x );
}
C APIs
Usage
#include "stdlib/number/float64/base/from_words.h"
stdlib_base_float64_from_words( high, low, *x )
Creates a double-precision floating-point number from a higher order word and a lower order word.
#include <stdint.h>
uint32_t high = 1074339512;
uint32_t low = 1374389535;
double x;
stdlib_base_float64_from_words( high, low, &x );
The function accepts the following arguments:
- high:
[in] uint32_t
higher order word. - low:
[in] uint32_t
lower order word. - x:
[out] double*
destination for a double-precision floating-point number.
void stdlib_base_float64_from_words( const uint32_t high, const uint32_t low, double *x );
Examples
#include "stdlib/number/float64/base/from_words.h"
#include <stdint.h>
#include <stdio.h>
int main( void ) {
uint32_t high = 1074339512;
uint32_t low[] = { 0, 10000, 1000000, 1374389535 };
double x;
int i;
for ( i = 0; i < 4; i++ ) {
stdlib_base_float64_from_words( high, low[ i ], &x );
printf( "high: %u, low: %u => %lf\n", high, low[ i ], x );
}
}