frexp
Splits a double-precision floating-point number into a normalized fraction and an integer power of two.
Installation
$ npm install math-float64-frexp
Usage
var frexp = ;
frexp( x )
Splits a double-precision floating-point number into a normalized fraction and an integer power of two.
var out = ;// returns [ 0.5, 3 ]
The first element of the returned array
is the normalized fraction and the second is the exponent. The normalized fraction and exponent satisfy the relation x = frac * 2**exp
.
var pow = ;var x = 4;var out = ;// returns [ 0.5, 3 ]var frac = out 0 ;var exp = out 1 ;var bool = x === frac * ;// returns true
If provided positive or negative zero
, NaN
, or positive or negative infinity
, the function
returns a two-element array
containing the input value and an exponent equal to 0
.
var out = ;// returns [ 0, 0 ]out = ;// returns [ -0, 0 ]out = ;// returns [ NaN, 0 ]out = ;// returns [ +infinity, 0 ]out = ;// returns [ -infinity, 0 ]
For all other numeric
input values, the absolute value of the normalized fraction resides on the interval [1/2,1)
.
Notes
-
Care should be taken when reconstituting a double-precision floating-point number from a normalized fraction and an exponent. For example,
var pow = ;// x ~ 2**1023var x = 8988939926493918e+307;var out = ;// returns [ 0.5000263811533315, 1024 ]// Naive reconstitution:var y = out 0 * ;// returns +infinity// Account for 2**1024 evaluating as infinity by recognizing 2**1024 = 2**1 * 2**1023:y = out 0 * * ;// returns 8.988939926493918e+307
Examples
var round = ;var pow = ;var frexp = ;var sign;var frac;var exp;var x;var f;var v;var i;// Generate random numbers and break each into a normalized fraction and an integer power of two...for i = 0; i < 100; i++if Math < 05sign = -1;elsesign = 1;frac = Math * 10;exp = - 308;x = sign * frac * ;f = ;if f 1 > 1023v = f 0 * * ;elsev = f 0 * ;console;
To run the example code from the top-level application directory,
$ node ./examples/index.js
Tests
Unit
This repository uses tape for unit tests. To run the tests, execute the following command in the top-level application directory:
$ make test
All new feature development should have corresponding unit tests to validate correct functionality.
Test Coverage
This repository uses Istanbul as its code coverage tool. To generate a test coverage report, execute the following command in the top-level application directory:
$ make test-cov
Istanbul creates a ./reports/coverage
directory. To access an HTML version of the report,
$ make view-cov
Browser Support
This repository uses Testling for browser testing. To run the tests in a (headless) local web browser, execute the following command in the top-level application directory:
$ make test-browsers
To view the tests in a local web browser,
$ make view-browser-tests
License
Copyright
Copyright © 2016. The Compute.io Authors.