| * 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]) |