modf

Decompose a double-precision floating-point number into integral and fractional parts.

Usage

var modf = require( '@stdlib/math/base/special/modf' );

modf( x )

Decomposes a double-precision floating-point number into integral and fractional parts, each having the same type and sign as x.

var parts = modf( 3.14 );
// returns [ 3.0, 0.14000000000000012 ]

parts = modf( +0.0 );
// returns [ +0.0, +0.0 ]

parts = modf( -0.0 );
// returns [ -0.0, -0.0 ]

parts = modf( Infinity );
// returns [ Infinity, +0.0 ]

parts = modf( -Infinity );
// returns [ -Infinity, -0.0 ]

parts = modf( NaN );
// returns [ NaN, NaN ]

modf.assign( x, out, stride, offset )

Decomposes a double-precision floating-point number into integral and fractional parts, each having the same type and sign as x, and assigns results to a provided output array.

var Float64Array = require( '@stdlib/array/float64' );

var out = new Float64Array( 2 );

var parts = modf.assign( 3.14, out, 1, 0 );
// returns <Float64Array>[ 3.0, 0.14000000000000012 ]

var bool = ( parts === out );
// returns true

Examples

var randu = require( '@stdlib/random/base/randu' );
var modf = require( '@stdlib/math/base/special/modf' );

var parts;
var x;
var i;

for ( i = 0; i < 100; i++ ) {
    x = (randu()*1000.0) - 500.0;
    parts = modf( x );
    console.log( 'modf(%d) => integral: %d. fraction: %d.', x, parts[ 0 ], parts[ 1 ] );
}

C APIs

Usage

#include "stdlib/math/base/special/modf.h"

stdlib_base_modf( x, integral, frac )

Decomposes a double-precision floating-point number into integral and fractional parts, each having the same type and sign as x.

double integral;
double frac;

stdlib_base_modf( 4.0, &integral, &frac );

The function accepts the following arguments:

  • x: [in] double input value.
  • frac: [out] double* destination for the integral part.
  • exp: [out] double* destination for the fractional part.
void stdlib_base_modf( const double x, double *integral, double *frac );

Examples

#include "stdlib/math/base/special/modf.h"
#include <stdio.h>

int main( void ) {
    const double x[] = { 4.0, 0.0, -0.0, 1.0, -1.0, 3.14, -3.14, 1.0e308, -1.0e308, 1.0/0.0, -1.0/0.0, 0.0/0.0 };

    double integral;
    double frac;
    int i;
    for ( i = 0; i < 12; i++ ) {
        stdlib_base_modf( x[ i ], &integral, &frac );
        printf( "x: %lf => integral: %lf, frac: %lf\n", x[ i ], integral, frac );
    }
}
Did you find this page helpful?