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.