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 indata
. This includes bash scripts used to run the tests and Ruby scripts used to generate the seeds. Each script is associated with the directory indata
with the same name prefixed withtest-
. 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- GENERATOR.c : used to create the TestU01 and the stdout version.
- GENERATOR-ed.c : computes equidistribution
- GENERATOR-ez.c : computes the escape-from-zero statistics
- GENERATOR-speed.c : measures speed
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.