From b01e894ff8237322e369b65f04c57c111f10c810 Mon Sep 17 00:00:00 2001 From: pixel Date: Fri, 18 Jul 2008 14:05:39 +0000 Subject: Beautifying the code a bit. --- lib/RandISAAC.cc | 179 +++++++++++++++++++++++++++++++++---------------------- 1 file changed, 108 insertions(+), 71 deletions(-) diff --git a/lib/RandISAAC.cc b/lib/RandISAAC.cc index 2b0b09b..021bf20 100644 --- a/lib/RandISAAC.cc +++ b/lib/RandISAAC.cc @@ -17,7 +17,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -/* $Id: RandISAAC.cc,v 1.1 2008-07-18 14:01:49 pixel Exp $ */ +/* $Id: RandISAAC.cc,v 1.2 2008-07-18 14:05:39 pixel Exp $ */ /* Based on ISAAC. See original (C) mention below. */ @@ -53,28 +53,30 @@ MODIFIED: *(r++) = b = (ind(mm,y>>RANDSIZL) + x) & 0xffffffff; \ } -void Random::isaac() { - Uint32 a,b,x,y,*m,*mm,*m2,*r,*mend; - mm=randmem; r=randrsl; - a = randa; b = (randb + (++randc)) & 0xffffffff; - for (m = mm, mend = m2 = m+(RANDSIZ/2); m>6 , a, b, mm, m, m2, r, x); - rngstep( a<<2 , a, b, mm, m, m2, r, x); - rngstep( a>>16, a, b, mm, m, m2, r, x); - } - for (m2 = mm; m2>6 , a, b, mm, m, m2, r, x); - rngstep( a<<2 , a, b, mm, m, m2, r, x); - rngstep( a>>16, a, b, mm, m, m2, r, x); - } - randb = b; randa = a; +void Random::isaac() +{ + Uint32 a, b, x, y, *m, *mm, *m2, *r, *mend; + + mm = randmem; + r = randrsl; + a = randa; + b = (randb + (++randc)) & 0xffffffff; + for (m = mm, mend = m2 = m + (RANDSIZ / 2); m < mend;) { + rngstep(a << 13, a, b, mm, m, m2, r, x); + rngstep(a >> 6, a, b, mm, m, m2, r, x); + rngstep(a << 2, a, b, mm, m, m2, r, x); + rngstep(a >> 16, a, b, mm, m, m2, r, x); + } + for (m2 = mm; m2 < mend;) { + rngstep(a << 13, a, b, mm, m, m2, r, x); + rngstep(a >> 6, a, b, mm, m, m2, r, x); + rngstep(a << 2, a, b, mm, m, m2, r, x); + rngstep(a >> 16, a, b, mm, m, m2, r, x); + } + randb = b; + randa = a; } - #define mix(a,b,c,d,e,f,g,h) \ { \ a^=b<<11; d+=a; b+=c; \ @@ -87,60 +89,95 @@ void Random::isaac() { h^=a>>9; c+=h; a+=b; \ } -/* if (flag==TRUE), then use the contents of randrsl[] to initialize mm[]. */ -void Random::randinit(int flag) { - int i; - Uint32 a,b,c,d,e,f,g,h; - Uint32 *m,*r; - randa = randb = randc = 0; - m=randmem; - r=randrsl; - a=b=c=d=e=f=g=h=0x9e3779b9; /* the golden ratio */ - - for (i=0; i<4; ++i) /* scramble it */ - { - mix(a,b,c,d,e,f,g,h); - } - - if (flag) - { - /* initialize using the contents of r[] as the seed */ - for (i=0; i