# modf

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

## Usage

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

#### modf( [out,] 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 ]
``````

To avoid unnecessary memory allocation, the function supports providing an output (destination) object.

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

var out = new Float64Array( 2 );

var parts = modf( out, 3.14 );
// 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 ] );
}
``````