Set High Word

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

Usage

var setHighWord = require( '@stdlib/number/float64/base/set-high-word' );

setHighWord( x, high )

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

var high = 5 >>> 0; // => 0 00000000000 00000000000000000101

var y = setHighWord( 3.14e201, high ); // => 0 00000000000 0000000000000000010110010011110010110101100010000010
// returns 1.18350528745e-313

var PINF = require( '@stdlib/constants/float64/pinf' ); // => 0 11111111111 00000000000000000000 00000000000000000000000000000000

high = 1072693248 >>> 0; // => 0 01111111111 00000000000000000000

// Set the higher order bits of `+infinity` to return `1`:
y = setHighWord( PINF, high ); // => 0 01111111111 0000000000000000000000000000000000000000000000000000
// returns 1.0

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/uint32/max' );
var setHighWord = require( '@stdlib/number/float64/base/set-high-word' );

var high;
var frac;
var exp;
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 higher order word of `x` to generate new random numbers having the same lower order word...
for ( i = 0; i < 100; i++ ) {
    high = round( randu()*MAX_UINT32 );
    y = setHighWord( x, high );
    console.log( 'x: %d. new high word: %d. y: %d.', x, high, y );
}

C APIs

Usage

#include "stdlib/number/float64/base/set_high_word.h"

stdlib_base_float64_set_high_word( high, *x )

Sets the more significant 32 bits of a double-precision floating-point number.

#include <stdint.h>

uint32_t high = 1074339512;
double x = 0.0;

stdlib_base_float64_set_high_word( high, &x );

The function accepts the following arguments:

  • high: [in] uint32_t higher order word.
  • x: [in-out] double* reference to (and destination for) a double-precision floating-point number.
void stdlib_base_float64_set_high_word( const uint32_t high, double *x );

Examples

#include "stdlib/number/float64/base/set_high_word.h"
#include <stdint.h>
#include <stdio.h>

int main( void ) {
    uint32_t high[] = { 1074339512, 1074339513, 1074339514, 1074339515 };
    double x = 3.14;

    int i;
    for ( i = 0; i < 4; i++ ) {
        stdlib_base_float64_set_high_word( high[ i ], &x );
        printf( "high: %u => %lf\n", high[ i ], x );
    }
}
Did you find this page helpful?