This directory contains the contents of xorshift-1.1.2.tgz.
(See http://xorshift.di.unimi.it/ for the original archive.)
For the licensing details, see each individual file.
This archive contains the files related to my papers "An experimental exploration of Marsaglia's xorshift generators, scrambled" and "Further scramblings of Marsaglia's xorshift generators". The data generated during the experiments is available as a separate download at http://xorshift.di.unimi.it/xorshift-data.tar.bz2.
The files triple64, triple1024 and triple4096 contains the triple giving a full period a state spaces of 64, 1024 and 4096 bits.
The directory data
contains scripts eval-01.rb and eval-db.rb, which
analyze the results of TestU01/Dieharder and print a succint report of
the test results. For example,
./eval-01.rb test-xorshift64-small >xorshift64-small
will produce data for SmallCrush on the xorshift64 generators.
The script conj.sh can be used with xorshift data to get combined results for xorshift conjugate generators:
./conj.sh <xorshift64-small
The script ./sum.sh can instead be used to add values from standard and reverse generators. For instance,
./eval-01.rb test-xorshift64star32-medium >xorshift64star32-medium
./eval-01.rb test-xorshift64star32-medium-rev >xorshift64star32-medium-rev
./sum.sh xorshift64star32-medium xorshift64star32-medium-rev >xorshift64star32-medium-comb
The directory scripts
contains the scripts used to generate the results
in data
. This includes bash scripts used to run the tests and Ruby scripts
used to generate the seeds. Each script is associated with the directory
in data
with the same name prefixed with test-
. Note that some of the
scripts include tests to limit parallel computations (so they should be
adapted to your hardware), and some compute only a part of the data of
the associated directory (e.g., because the computation was carried out
for different generators on different machines). It is trivial to use
the triple files to make the scripts compute all data.
In the the directory c
for each GENERATOR you can find
compile.sh compiles all binaries, except for those computing equidistribution, as they require MTToolBox https://github.com/MSaito/MTToolBox/. The libraries associated with TestU01 must be installed and accessible (compile.sh assumes, however, that includes might be in /usr/local/include).
The directory full
contains all that is necessary to compute
full-period generators using Fermat http://home.bway.net/lewis/. This
includes
the Java class XorShift, which computes directly the parameters for full period using matrix powers. You must modify the BITS constant and recompile the class.
the Java class XorShiftPoly, which outputs the Fermat code to check primitivity of irreducible polynomials without using large exponents. The number of bits is given as a command-line argument.
The Fermat code used to compute the characteristic polynomials
associated to generators, and test their irreducibility. The Ruby
scripts have been used to generate the associated Fermat code. The
tests for primitivity must be generated by feeding to the script
test.sh TAB-separated pairs <FILENAME,POLY>, where POLY is in Fermat
output format; test.sh expects the number of bits as only
argument. Grepping the output of test.sh for OK
you can find
the triples providing full period.
The file xorshift*poly.txt
contain the characteristic polynomials
associated with full-period generators, and their weight.
This quite complicated setup is due to the difficult of working with predefined integers in Fermat, as at soon as one switches to Z/2 all known values become 0 or 1.
The directory dieharder
contains a CHANGES file and an additional source by
which you can get the modified version of Dieharder used to perform the
tests, starting from Dieharder 3.31.1.
The directory equidist
contains files describing the equidistribution
score of each xorshift generator considered in the paper.