continued-fraction

Continued fraction approximation.

Usage

var continuedFraction = require( '@stdlib/math/base/tools/continued-fraction' );

continuedFraction( generator[, options ] )

Evaluates the continued fraction described by the supplied generator argument. generator can be either a function which returns an array with two elements, the a and b terms of the fraction, or an ES6 Generator object. By default, the function computes

Using an ES6 Generator object:

// Continued fraction for (e-1)^(-1):
var gen = generator();
var out = continuedFraction( gen );
// returns ~0.582

function* generator() {
var i = 0;
while ( true ) {
i += 1;
yield [ i, i ];
}
}

Alternatively, one can use a closure to achieve the same goal:

// Continued fraction for (e-1)^(-1):
var gen = generator();
var out = continuedFraction( gen );
// returns ~0.582

function generator() {
var i = 0;
return gen;

function gen() {
i += 1;
return [ i, i ];
}
}

The function accepts the following options:

• maxIter: integer denoting the maximum number of times the supplied generator object will be called. Default: 1000000.
• tolerance: number primitive specifying the used tolerance to assess convergence. Default: 2.22e-16.
• keep: boolean primitive indicating whether to keep the b0 term in the continued fraction. Default: false.

To evaluate

set the keep option to true.

var out = continuedFraction( generator(), {
'keep': true
});
// returns ~1.718

To change the maximum number of iterations, set the maxIter option.

var out = continuedFraction( generator(), {
'maxIter': 10
});
// returns ~0.582

The default tolerance of 2.22e-16 to assess convergence can be changed via the tolerance option.

var out = continuedFraction( generator(), {
'tolerance': 1e-1
});
// returns ~0.578

Examples

var continuedFraction = require( '@stdlib/math/base/tools/continued-fraction' );
var out;

function* generator() {
while ( true ) {
yield [ 1, 1 ];
}
}

function closure() {
var ones = [ 1, 1 ];
return gen;

function gen() {
return ones;
}
}

out = continuedFraction( generator(), {
'keep': true
});
console.log( 'Golden ratio (generator): %d,', out );

out = continuedFraction( closure(), {
'keep': true
});
console.log( 'Golden ratio (closure): %d', out );