vdc v0.2.1
VDC
Pure JS implementation of van der Corput low-discrepancy sequences.
Installation
With npm:
$ npm install vdcIn the browser:
<script src="vdc.js"></script>The browser exposes a variable VDC
Usage
The exported function VDC accepts a opts object with the following fields:
b(default2) base for the sequence.n(default0) starting index for the sequence.
Calling without arguments will default to the aforementioned values.
The object returned by VDC exposes a next() method to get the next element.
The field last holds the most recently generated value (accessing the field
does not trigger a recalculation)
For example:
//var VDC = require('vdc') // uncomment this line if in node
var opts = {'n':0, 'b':2};
var generator = VDC(opts);
for(var i = 0; i != 10; ++i) console.log(generator.next());The expected output is
0 (0/1)
0.5 (1/2)
0.25 (1/4)
0.75 (3/4)
0.125 (1/8)
0.625 (5/8)
0.375 (3/8)
0.875 (7/8)
0.0625 (1/16)
0.5625 (9/16)Testing
make test will run the nodejs-based test.
make baseline will generate the test baselines using Mathematica by explicitly
extracting and reversing the digits. The implementation is based off a tutorial
http://reference.wolfram.com/mathematica/CUDALink/tutorial/Applications.html
VanDerCorput[base_][len_] := Table[
With[{digits = Reverse@IntegerDigits[n, base]},
Sum[2^(-ii)*digits[[ii]], {ii, Length[digits]}]
], {n, len}]Notes
0 is the first value. Some sources (notably Wikipedia) start the sequence at
1/2, but others (Glasserman "Monte Carlo Methods in Financial Engineering")
claim that the original sequence definition started at 0.
License
Please consult the attached LICENSE file for details. All rights not explicitly granted by the Apache 2.0 license are reserved by the Original Author.