* gfsr: for consistency (Charles A. Wemple).  Make this change in 2.0

 127a142
>   state->nd = i-1;
133,134c148,149
<   for (i=0; i<32; ++i) {
<       int k=7+i*3;
---
>   for (i=0; i<32; i++) {
>       int k=7*i+3;
141d155
<   state->nd = i;


* Sort out "const" in prototypes, it looks odd since there are consts
for many functions which modify the state.  (Applies to both qrng and rng)

* New 64 bit generators in "Tables of 64-bit Mersenne Twisters",
Takuji Nishimura, ACM Transactions on Modeling and Computer
Simulation, Volumen 10, No 4, October 2000, p 348--357

* Need to run tests over the space of seeds, in addition to serial
tests (DIEHARD) for the default seed.  The congruences used for
seeding will give poor initial vectors for some seed values, e.g. 2^n.
Improve the seeding procedure by using a high-quality generator
(e.g. hash functions, md5 or sha) to generate the initial vectors.
Even if this is moderately expensive it is worthwhile since the
seeding is usually a one-off cost at program initialization, and the
results of all subsequent calls to the generator depend on it.  The
GSFR4 generator is particularly likely to benefit from this procedure.

* Add SWNS generator Phys.Rev.E 50 (2) p. 1607-1615 (1994), Phys.Rev.E
60 (6), p.7626-7628 (1999)

* Add get_array type methods which can provide optimized versions of
each function (?). We should offer the possibility of eliminating
function call overhead -- there are various possible ways to implement
it.

* Add ISAAC generator (??)

* Add (A)RC4 and hash based random number generators MD5, SHA.  This
should give crypto quality randomness, and guarantee different
sequences for each seed. Make the state (seed, count) where count
increments on each call of the generator.  Implement count as a big
integer stored in separate unsigned integers so that the period is
sufficiently long (e.g. 2^64 or 2^96). The generator would return
HASH(seed, count) on each call.

* Check that RANLXS will work on machines with non-standard width of
float/dbl (original has checks for DBL_MANT_DIG ..)

* mention more clearly why not all Cokus used (or recheck MT pages for
improvements)

* run the DIEHARD tests on all the generators, especially the ones we
are listing as "Simulation Quality" -- some of those are a bit old and
might fail one or two diehard tests.

* Add  NAG,       missing, gave up! 
       CDC 48-bit missing 

* Check out the bug fix to mrand48 that was made in glibc2, pr757

* Check out  the following paper,

    On the anomaly of ran1() in Monte Carlo pricing of financial
    derivatives; Akira Tajima , Syoiti Ninomiya , and Shu Tezuka ; Winter
    simulation , 1996, Page 360, from ACM

* The following papers have been published, I think we refer to them
(or could do),

    Pierre L'Ecuyer, "Tables of Linear Congruential Generators of different
    size and good lattice structure", Mathematics of Computation, Vol 68,
    No 225, Jan 1999, p249-260

    Pierre L'Ecuyer, "Tables of Maximally equidistributed combined LSFR
    generators", ibid, p261-270

* Look at this paper: I. Vattulainen, "Framework for testing random numbers
  in parallel calculations", Phys. Rev. E, 59, 6, June 1999, p7200

----------------------------------------------------------------------
DONE

x1. Improve the seeding for routines that use the LCG seed generator.
It can only generate 130,000 different initial states. We should
change it to provide 2^31 different initial states (this will also
prevent the high bits being zero). DONE - we now use a 32-bit
generator.

x8. Get the macros from the faster MT19937 generator and use them. We
need to make MT be the fastest of the simulation quality generators if
it is the default. DONE. It didn't improve the speed on other
platforms, so I just used the tricks which also worked on the pentium
(e.g. changing mag[x&1] to x&1 ? mag[1] : mag[0])
