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 theb0
term in the continued fraction. Default:false
.
To evaluate
set the keep
option to true
.
var out = continuedFraction( generator(), {
'keep': true
});
// returns ~1.718
function generator() {
var i = 0;
return gen;
function gen() {
i += 1;
return [ i, i ];
}
}
To change the maximum number of iterations, set the maxIter
option.
var out = continuedFraction( generator(), {
'maxIter': 10
});
// returns ~0.582
function generator() {
var i = 0;
return gen;
function gen() {
i += 1;
return [ i, i ];
}
}
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.579
function generator() {
var i = 0;
return gen;
function gen() {
i += 1;
return [ i, i ];
}
}
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 );