A special case of DigitalNet for the base b = 2.
The implementation exploit the binary nature of
computers and is much more efficient than for the general case.
Binary expansions are easy to obtain because the computer already
uses them internally.
The generator matrices
Cj are stored in a large array of size sk.
The c-th column of
Cj, for
c = 0,..., k - 1,
is stored at position jk + c of that array, as a 32-bit integer.
For all derived classes, the above 32-bit integer must be of the form
[00 ... C0C1 ... Cr-1].
The value of k cannot exceed 31 (32 is not allowed because Java does
not have 32-bit unsigned integers). The value of w is always 31.

The random digital shift in base 2 corresponds to a random XOR.
It can be applied via the method addRandomShift.

leftMatrixScramble(RandomStream stream)
Applies a linear scramble by multiplying each
Cj on the left
by a w×w nonsingular lower-triangular matrix
Mj,
as suggested by Matoušek and implemented
by Hong and Hickernell.

iterator

Constructs and returns a point set iterator.
The default implementation returns an iterator that uses the method
getCoordinate(i,j) to iterate over the
points and coordinates, but subclasses can reimplement it
for better efficiency.

addRandomShift

Adds a random digital shift to all the points of the point set,
using stream stream to generate the random numbers.
For each coordinate j from d1 to d2-1,
the shift vector
(dj, 0,..., dj, k-1)
is generated uniformly over
{0,..., b - 1}k and added modulo b to
the digits of all the points.
After adding a digital shift, all iterators must be reconstructed or
reset to zero.

leftMatrixScramble

Applies a linear scramble by multiplying each
Cj on the left
by a w×w nonsingular lower-triangular matrix
Mj,
as suggested by Matoušek and implemented
by Hong and Hickernell. The diagonal entries of
each matrix
Mj are generated uniformly over
{1,..., b - 1}, the entries below the diagonal are generated uniformly
over
{0,..., b - 1}, and all these entries are generated independently.
This means that in base b = 2, all diagonal elements are equal to 1.

iBinomialMatrixScramble

Applies the i-binomial matrix scramble proposed by Tezuka
.
This multiplies each
Cj on the left
by a w×w nonsingular lower-triangular matrix
Mj as in
leftMatrixScramble, but with the additional constraint that
all entries on any given diagonal or subdiagonal of
Mj are identical.

stripedMatrixScramble

Applies the striped matrix scramble proposed by Owen.
It multiplies each
Cj on the left
by a w×w nonsingular lower-triangular matrix
Mj as in
leftMatrixScramble, but with the additional constraint that
in any column, all entries below the diagonal are equal to the
diagonal entry, which is generated randomly over
{1,..., b - 1}.
Note that for b = 2, the matrices
Mj become deterministic, with
all entries on and below the diagonal equal to 1.

rightMatrixScramble

Applies a linear scramble by multiplying each
Cj on the right
by a single k×k nonsingular upper-triangular matrix
M,
as suggested by Faure and Tezuka.
The diagonal entries of the matrix
M are generated uniformly over
{1,..., b - 1}, the entries above the diagonal are generated uniformly
over
{0,..., b - 1}, and all the entries are generated independently.
The effect of this scramble is only to change the order in which the
points are generated. If one computes the average value of a
function over all the points of a given digital net, or over
a number of points that is a power of the basis, then this
scramble makes no difference.

leftMatrixScrambleFaurePermut

Similar to leftMatrixScramble except that the diagonal elements
of each matrix
Mj are chosen from a restricted set of the best
integers as calculated by Faure. They are generated
uniformly over the first sb elements of array F, where F is
made up of a permutation of the integers
[1..(b - 1)]. These integers are
sorted by increasing order of the upper bounds of the extreme discrepancy
for the given integer.