Set Low Word

Set the less significant 32 bits of a double-precision floating-point number.

Usage

``````var setLowWord = require( '@stdlib/number/float64/base/set-low-word' );
``````

setLowWord( x, low )

Sets the less significant 32 bits (lower order word) of a double-precision floating-point number `x` to a bit sequence represented by an unsigned 32-bit integer `low`. The returned `double` will have the same more significant 32 bits (higher order word) as `x`.

``````var low = 5 >>> 0; // => 00000000000000000000000000000101

var x = 3.14e201; // => 0 11010011100 01001000001011000011 10010011110010110101100010000010

var y = setLowWord( x, low ); // => 0 11010011100 01001000001011000011 00000000000000000000000000000101
// returns 3.139998651394392e+201
``````

Setting the lower order bits of `NaN` or positive or negative `infinity` will return `NaN`, as `NaN` is defined as a `double` whose exponent bit sequence is all ones and whose fraction can be any bit sequence except all zeros. Positive and negative `infinity` are defined as `doubles` with an exponent bit sequence equal to all ones and a fraction equal to all zeros. Hence, changing the less significant bits of positive and negative `infinity` converts each value to `NaN`.

``````var PINF = require( '@stdlib/constants/math/float64-pinf' );
var NINF = require( '@stdlib/constants/math/float64-ninf' );

var low = 12345678;

var y = setLowWord( PINF, low );
// returns NaN

y = setLowWord( NINF, low );
// returns NaN

y = setLowWord( NaN, low );
// returns NaN
``````

Examples

``````var pow = require( '@stdlib/math/base/special/pow' );
var round = require( '@stdlib/math/base/special/round' );
var randu = require( '@stdlib/random/base/randu' );
var MAX_UINT32 = require( '@stdlib/constants/math/uint32-max' );
var setLowWord = require( '@stdlib/number/float64/base/set-low-word' );

var frac;
var exp;
var low;
var x;
var y;
var i;

// Generate a random double-precision floating-point number:
frac = randu() * 10.0;
exp = -round( randu() * 323.0 );
x = frac * pow( 10.0, exp );

// Replace the lower order word of `x` to generate new random numbers having the same higher order word...
for ( i = 0; i < 100; i++ ) {
low = round( randu()*MAX_UINT32 );
y = setLowWord( x, low );
console.log( 'x: %d. new low word: %d. y: %d.', x, low, y );
}
``````