I do not want to sound too critical, but do we need the Mersenne twister? It isHi Alan,We need a volunteer to step forward to change example 21 in C so that it uses a simple random number generator that is internal to the example (perhaps something extremely simple but reasonably effective if you pick a "good" seed such as the middle square method described at http://en.wikipedia.org/wiki/Middle-square_method) and also so that execution times are not made part of PLplot labels. Once these changes were propagated to the rest of the front ends, this should hopefully make example 21 results uniform for all front-ends.Coincidently, I was thinking about a RNG provided by the PLplot library. If nobody uses it except our example 21, no problem, since the code of RNGs is rather short, so no harm done here, and maybe some users find it useful though. A very good one (passed the diehard test), although maybe not good enough for encryption (don't think that will be a problem :), is the Mersenne Twister RNG http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html There is a C implementation available and the code is completely free. We could write a PLplot interface to this RNG, and then make the changes to all bindings. I volunteer to do that (that is the RNG interface, not all changes to the bindings), but only in two weeks, since I'm away for one week now.

a very nice thing, but wouldn't a linear congruential one do? We are not looking

for the ultimate in PRNGs, are we? :)

Here is a PRNG I picked up from Tcl (8.4):

/*

* Generate the random number using the linear congruential

* generator defined by the following recurrence:

* seed = ( IA * seed ) mod IM

* where IA is 16807 and IM is (2^31) - 1. The recurrence maps

* a seed in the range [1, IM - 1] to a new seed in that same range.

* The recurrence maps IM to 0, and maps 0 back to 0, so those two

* values must not be allowed as initial values of seed.

*

* In order to avoid potential problems with integer overflow, the

* recurrence is implemented in terms of additional constants

* IQ and IR such that

* IM = IA*IQ + IR

* None of the operations in the implementation overflows a 32-bit

* signed integer, and the C type long is guaranteed to be at least

* 32 bits wide.

*

* For more details on how this algorithm works, refer to the following

* papers:

*

* S.K. Park & K.W. Miller, "Random number generators: good ones

* are hard to find," Comm ACM 31(10):1192-1201, Oct 1988

*

* W.H. Press & S.A. Teukolsky, "Portable random number

* generators," Computers in Physics 6(5):522-524, Sep/Oct 1992.

*/

#define RAND_IA 16807

#define RAND_IM 2147483647

#define RAND_IQ 127773

#define RAND_IR 2836

#define RAND_MASK 123459876

tmp = iPtr->randSeed/RAND_IQ;

iPtr->randSeed = RAND_IA*(iPtr->randSeed - tmp*RAND_IQ) - RAND_IR*tmp;

if (iPtr->randSeed < 0) {

iPtr->randSeed += RAND_IM;

}

(This is under BSD license)

Regards,

Arjen