# modf
> Decompose a [double-precision floating-point number][ieee754] into integral and fractional parts.
## Usage
```javascript
var modf = require( '@stdlib/math/base/special/modf' );
```
#### modf( \[out,] x )
Decomposes a [double-precision floating-point number][ieee754] into integral and fractional parts, each having the same type and sign as `x`.
```javascript
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.
```javascript
var Float64Array = require( '@stdlib/array/float64' );
var out = new Float64Array( 2 );
var parts = modf( out, 3.14 );
// returns [ 3.0, 0.14000000000000012 ]
var bool = ( parts === out );
// returns true
```
## Examples
```javascript
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 ] );
}
```
[ieee754]: https://en.wikipedia.org/wiki/IEEE_754-1985