Bob Jenkins

Home * People * Bob Jenkins



Robert John Jenkins Jr., an American computer scientist, software developer, M.Sc. in CS from Carnegie Mellon University, and Microsoft and former Oracle employee. At Microsoft, he worked in the Cosmos team, and under Andrew Kadatch on the Cosmos storage distributed file system , written by Andrew in C++, and on the Scope query language. He was Oracle's resident expert on hash functions, and he designed and published various pseudorandom number generators and hash functions for hash table lookup , competing with Paul Hsieh.

=RKISS= Bob Jenkins' small noncryptographic PRNG approach is suited for Zobrist Hashing. Heinz van Saanen's RKISS as used in Stockfish since version 2.0 uses almost the same code despite embedded it into a C++ class and initialization. Van Saanen admitted he took an obviously free and quite raw C-snippet from a random-related newsgroup long time ago. When turned this to a functional C++-class years later he could not find the initial source any longer, and gave credit to George Marsaglia as inventor of the RNG-Kiss-family. This is Bob's 64 bit code : If you want to use 8-byte terms instead of 4-byte terms, the proper rotate amounts are (39,11) for the two-rotate version (yielding at least 13.3 bits of avalanche after 5 rounds) or (7,13,37) for the three-rotate version (yielding 18.4 bits of avalanche after 5 rounds). I think I'd got with the three-rotate version, because the ideal is 32 bits of avalanche, and 13.3 isn't even half of that.

typedef unsigned long long u8; typedef struct ranctx { u8 a; u8 b; u8 c; u8 d; } ranctx;

u8 ranval( ranctx *x ) { u8 e = x->a - rot(x->b, 7); x->a = x->b ^ rot(x->c, 13); x->b = x->c + rot(x->d, 37); x->c = x->d + e;   x->d = e + x->a; return x->d; }
 * 1) define rot(x,k) (((x)<<(k))|((x)>>(64-(k))))

void raninit( ranctx *x, u8 seed ) { u8 i;   x->a = 0xf1ea5eed, x->b = x->c = x->d = seed; for (i=0; i<20; ++i) { (void)ranval(x); } }

=Selected Publications=
 * Bob Jenkins (1997). Hash functions. Dr. Dobb's Journal, September 1997
 * Ronnie Chaiken, Bob Jenkins, Per-Åke Larson, Bill Ramsey, Darren Shakib, Simon Weaver, Jingren Zhou (2008). SCOPE: Easy and Efficient Parallel Processing of Massive Data Sets. Microsoft Corporation, pdf
 * Andrew Kadatch, Bob Jenkins (2010). Everything we know about CRC but afraid to forget.

=External Links=
 * Robert John Jenkins Junior from Wikipedia
 * Bob Jenkins' Web Site
 * Random Number Results
 * Hash Functions and Block Ciphers
 * A Hash Function for Hash Table Lookup updated Dr. Dobb's article
 * Perfect Hashing
 * Jenkins hash function from Wikipedia

=References= Up one level