Author: Vincent Diepeveen
Date: 17:58:57 10/28/03
Go up one level in this thread
On October 28, 2003 at 16:16:53, Dieter Buerssner wrote: All what is needed is that there is no multilineair connection between the outputted numbers, of course assuming a reasonable cycle length. Even a 64 bits rewrite of the very fast ranrot i did and spreaded around is doing fine here: #define KK 17 #define JJ 10 #define R1 5 #define R2 3 BITBOARD randbuffer[KK+3] = { /* history buffer filled with some random numbers */ 0x92930cb295f24dab,0x0d2f2c860b685215,0x4ef7b8f8e76ccae7,0x03519154af3ec239,0x195e36fe715fad23, 0x86f2729c24a590ad,0x9ff2414a69e4b5ef,0x631205a6bf456141,0x6de386f196bc1b7b,0x5db2d651a7bdf825, 0x0d2f2c86c1de75b7,0x5f72ed908858a9c9,0xfb2629812da87693,0xf3088fedb657f9dd,0x00d47d10ffdc8a9f, 0xd9e323088121da71,0x801600328b823ecb,0x93c300e4885d05f5,0x096d1f3b4e20cd47,0x43d64ed75a9ad5d9 /*0xa05a7755512c0c03,0x960880d9ea857ccd,0x7d9c520a4cc1d30f,0x73b1eb7d8891a8a1,0x116e3fc3a6b7aadb*/ }; int r_p1, r_p2; /* indexes into history buffer */ /******************************************************** AgF 1999-03-03 * * Random Number generator 'RANROT' type B * * by Agner Fog * * speeded up a number of times by Vincent Diepeveen (2003) * * * * This is a lagged-Fibonacci type of random number generator with * * rotation of bits. The algorithm is: * * X[n] = ((X[n-j] rotl r1) + (X[n-k] rotl r2)) modulo 2^b * * * * The last k values of X are stored in a circular buffer named * * randbuffer. * * * * This version works with any integer size: 16, 32, 64 bits etc. * * The integers must be unsigned. The resolution depends on the integer * * size. * * * * Note that the function RanrotAInit must be called before the first * * call to RanrotA or iRanrotA * * * * The theory of the RANROT type of generators is described at * * www.agner.org/random/ranrot.htm * * * *************************************************************************/ FORCEINLINE BITBOARD rotl(BITBOARD x,int r) {return(x<<r)|(x>>(64-r));} /* returns a random number of 64 bits unsigned */ FORCEINLINE BITBOARD RanrotA(void) { /* generate next random number */ BITBOARD x = randbuffer[r_p1] = rotl(randbuffer[r_p2],R1) + rotl(randbuffer[r_p1], R2); /* rotate list pointers */ if( --r_p1 < 0) r_p1 = KK - 1; if( --r_p2 < 0 ) r_p2 = KK - 1; return x; } /* this function initializes the random number generator. */ void RanrotAInit(void) { int i; /* one can fill the randbuffer here with possible other values here */ randbuffer[0] = 0x92930cb295f24000 | (BITBOARD)ProcessNumber; randbuffer[1] = 0x0d2f2c860b000215 | ((BITBOARD)ProcessNumber<<12); /* initialize pointers to circular buffer */ r_p1 = 0; r_p2 = JJ; /* randomization init */ for( i = 0; i < 3000; i++ ) (void)RanrotA(); } >On October 28, 2003 at 15:46:27, Dan Andersson wrote: > >> There is one supposedly 'very' secure and simple random generator that I like >>because of its simplicity and randomness. The only assumption made is that >>factoring large integers is 'hard'. The Blum Blum Shub: >> Xn+1 = (Xn)2 mod M where M is a product of two large primes. The O(log log >>M) least significant bits are random. You can also use relatively low values for >>M and use the parity of Xn as output for one bit at a time if large values are >>unworkable. > >I am not too convinced, yet. Can you show a sample implementation here >(preferably one, that does have M < 2**64 - I am not interested in cryptographic >use, just like to test the randomness of the output). >I guess, I can implement it myself easily, when you can suggest a suitable M. >Perhaps you would also know the cycle-length. The cycle length clearly <= M. So, >I fear, it is possible, that it may fail known statistical tests on the >randomness for even rather large values of M. For intermediate values (say >around 2**63) one might already get a "feeling" about its behaviour. > > >> It is not fast by any means ;) > >It should be more than fast enough for chess engines. It might be fast enough >for some serious simulations. > >Regards, >Dieter
This page took 0 seconds to execute
Last modified: Thu, 15 Apr 21 08:11:13 -0700
Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.