Author: Robert Hyatt
Date: 10:45:19 10/18/98
Go up one level in this thread
On October 18, 1998 at 10:57:04, Ed Schröder wrote: >>>#define LENGTH 64*12 >>> >>>int random [LENGTH]; >>> >>>int a,b,c,d,x; >>> >>>srand(9); // initialize prime number >>> >>>for (x=0; x<LENGTGH; x++) >>> { a=rand(); b=rand(); if (b & 1) a=a | 0x8000; >>> c=rand(); d=rand(); if (d & 1) c=c | 0x8000; >>> random[x]=(a<<16)+c; >>> } >>> >>>I wonder how good such a system is and how others do it. >>> >>>- Ed - >> >> >>First, I don't use "rand()" at all. I ran some tests on it when >>I started the crafty project and didn't like the result. Instead, I >>took the 32 bit random number generator from the well-known numerical >>book "Numerical Recipes". It is far better, and you can certainly take >>the source to this directly from crafty since this piece of code is >>also public domain. > >Can you post this code? In case you answer with a Crafty ".C" file where can >download Crafty's code? > >- Ed - > > >>I use 64 bit random numbers for hashing and ran a lot of hamming distance >>tests to be sure the numbers looked ok, and was satisfied... it's in utility.c, but here is the code for 32 bit values: /* A 32 bit random number generator. An implementation in C of the algorithm given by Knuth, the art of computer programming, vol. 2, pp. 26-27. We use e=32, so we have to evaluate y(n) = y(n - 24) + y(n - 55) mod 2^32, which is implicitly done by unsigned arithmetic. */ unsigned int Random32(void) { /* random numbers from Mathematica 2.0. SeedRandom = 1; Table[Random[Integer, {0, 2^32 - 1}] */ static unsigned long x[55] = { 1410651636UL, 3012776752UL, 3497475623UL, 2892145026UL, 1571949714UL, 3253082284UL, 3489895018UL, 387949491UL, 2597396737UL, 1981903553UL, 3160251843UL, 129444464UL, 1851443344UL, 4156445905UL, 224604922UL, 1455067070UL, 3953493484UL, 1460937157UL, 2528362617UL, 317430674UL, 3229354360UL, 117491133UL, 832845075UL, 1961600170UL, 1321557429UL, 747750121UL, 545747446UL, 810476036UL, 503334515UL, 4088144633UL, 2824216555UL, 3738252341UL, 3493754131UL, 3672533954UL, 29494241UL, 1180928407UL, 4213624418UL, 33062851UL, 3221315737UL, 1145213552UL, 2957984897UL, 4078668503UL, 2262661702UL, 65478801UL, 2527208841UL, 1960622036UL, 315685891UL, 1196037864UL, 804614524UL, 1421733266UL, 2017105031UL, 3882325900UL, 810735053UL, 384606609UL, 2393861397UL }; static int init = 1; static unsigned long y[55]; static int j, k; unsigned long ul; if (init) { int i; init = 0; for (i = 0; i < 55; i++) y[i] = x[i]; j = 24 - 1; k = 55 - 1; } ul = (y[k] += y[j]); if (--j < 0) j = 55 - 1; if (--k < 0) k = 55 - 1; return((unsigned int)ul); }
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.