In fact, I just wrapped this up into my Mersenne twister code - randInt
is now built in to the library and I eliminated the function call
overhead of calling rand() (or the mersenne equivalent.) Probably won't
make a noticeable difference, but since I'm porting it to D anyway, I
might as well fix this.
- Don
On Thu, 2006-12-07 at 12:12 -0500, Don Dailey wrote:
> On Thu, 2006-12-07 at 16:05 +0100, Ćukasz Lew wrote:
> > ii = pm::rand () % empty_v_cnt; // TODO improve speed "%"
>
>
> Try this, I think it could be faster, not sure, but has the advantage
> that it's slightly more correct.
>
> // returns an integer between 0 and n-1 inclusive
> //
> unsigned long randint(unsigned long n)
> {
> unsigned long v = n;
> unsigned long r;
>
> v--;
> v |= v >> 1;
> v |= v >> 2;
> v |= v >> 4;
> v |= v >> 8;
> v |= v >> 16;
>
> do { r = rand(); } while ( (r & v) >= n );
>
> return( r & v );
> }
>
>
>
> - Don
>
>
> _______________________________________________
> computer-go mailing list
> [email protected]
> http://www.computer-go.org/mailman/listinfo/computer-go/
_______________________________________________
computer-go mailing list
[email protected]
http://www.computer-go.org/mailman/listinfo/computer-go/