Hmm, I use just a super-naive LCG

        unsigned long hi, lo;
        lo = 16807 * (pmseed & 0xffff);
        hi = 16807 * (pmseed >> 16);
        lo += (hi & 0x7fff) << 16;
        lo += hi >> 15;
        pmseed = (lo & 0x7fffffff) + (lo >> 31);
        return ((pmseed & 0xffff) * max) >> 16;

in Pachi.  Frankly, I think I could get away with just
        pmseed = pmseed * 16807 + 12345;
        return pmseed % max;

Do you really need high quality RNG in your program?  I'd be interested
if someone using a sophisticated RNG would compare it with using just
the above wrt. Elo strength and performance.

(BTW, for floats, there's this neat trick to take advantage of the
internal representation

        union { unsigned long ul; floating_t f; } p;
        p.ul = (((pmseed *= 16807) & 0x007fffff) - 1) | 0x3f800000;
        return p.f - 1.0f;

see also http://rgba.org/articles/sfrand/sfrand.htm)

On Sun, Mar 29, 2015 at 05:58:56PM +0800, remco.bloe...@singularityu.org wrote:
> I switched to SFMT [0].  But that was some years ago, there might be faster 
> options now.
> 
> I also generated it in megabyte batches and consume it from there, generating 
> a new megabyte as needed.
> 
> Lastly, I had some code to make sure I did not consume more bits of entropy 
> than required.  Two uniform choices,  one bit.  Three choices: fractional 
> bits.
> 
> [0]
> 
> http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/
> 
> — Remco 
> 
> -----Original Message-----
> From: folkert <folk...@vanheusden.com>
> To: computer-go@computer-go.org
> Sent: Sun, 29 Mar 2015 17:50
> Subject: [Computer-go] fast + good RNG
> 
> Hi,
> 
> I measured that std::mt19937_64 (the mersenne twister from the standard
> c++ libraries) uses about 40% cpu time during playouts.
> 
> So I wonder: is there a faster prng while still generating good enough
> random?
> 
> 
> Folkert van Heusden
> 
> -- 
> Nagios user? Check out CoffeeSaint - the versatile Nagios status
> viewer! http://www.vanheusden.com/java/CoffeeSaint/
> ----------------------------------------------------------------------
> Phone: +31-6-41278122, PGP-key: 1F28D8AE, www.vanheusden.com
> _______________________________________________
> Computer-go mailing list
> Computer-go@computer-go.org
> http://computer-go.org/mailman/listinfo/computer-go

> _______________________________________________
> Computer-go mailing list
> Computer-go@computer-go.org
> http://computer-go.org/mailman/listinfo/computer-go


-- 
                                Petr Baudis
        If you do not work on an important problem, it's unlikely
        you'll do important work.  -- R. Hamming
        http://www.cs.virginia.edu/~robins/YouAndYourResearch.html
_______________________________________________
Computer-go mailing list
Computer-go@computer-go.org
http://computer-go.org/mailman/listinfo/computer-go

Reply via email to