From: Andrew F. <aw...@ro...> - 2002-03-16 14:28:17
|
> > > Is it okay with Manchester? > You bet - so long as the interface stays relatively stable. > We have a vast > amount of code that uses it. Excellent, thanks! > One other question is whether to provide vnl_sample emulation (using a > global static mbl_mz_random object.) This might be useful to > anyone who has > built their code to rely on a single pseudo random sequence for their > application, based on a single key (e.g. for debugging purposes.) Probably a good plan. I guess the idea is to make vnl_mz_random.h and have vnl_sample draw from that? If we need a fast but crappy generator, an inline vnl_sample_fast() with a simple lcrng would probably be a good plan? Although.... just read this on gamasutra: Random Number Generation with the Mersenne Twister And now for something completely different... The AGB [Gameboy Advance]'s main CPU does not implement division and mod in hardware. They are implemented in software and are too slow to use for run time generation of random numbers. Most of the high quality random number generation routines require these operations. There is a relatively new random number generation routine called the Mersenne Twister developed by Makoto Matsumoto and Takuji Nishimura in 1997, which does not require mod or divide. This is an industrial strength generator with a period of 2^19937 and is 623-dimensionally equi-distributed. This is far more powerful than you are likely to need in a game-but it is simple to implement and fast to run, so why not use it? To implement the full generator as described in their paper you need to allocate an array of 2496 bytes to store the current state of the generator. It is possible to make this buffer smaller but this will reduce the period of the generator. But then again, this generator already has a period far greater than the number of stars in the universe, so cutting the period down a little bit won't hurt much if you need to get an extra kilobyte out of the generator's state buffer. Generating a new random number out of the state buffer is a matter of doing 4 XORs, 2 ANDs and 4 register shifts, so its fast enough for any purpose. I won't include any information on the theory of how the Mersenne Twister works. You can read about it in Matsumoto and Nishimura's paper (available on their web site http://www.math.keio.ac.jp/~matumoto/emt.html) |