# continued-fraction
> [Continued fraction][continued-fraction] approximation.
## Usage
```javascript
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][es6-generator]. By default, the function computes
Using an ES6 [Generator object][es6-generator]:
```javascript
// 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:
```javascript
// 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`.
```javascript
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.
```javascript
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.
```javascript
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
```javascript
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 );
```
[continued-fraction]: https://en.wikipedia.org/wiki/Continued_fraction
[es6-generator]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function*