From 8fb16df70e032c782b6bf81b211e8dab1724a7dc Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Sun, 7 Nov 2010 12:11:01 +0100 Subject: [PATCH] Let rkiss.h to follow SF coding style Fix also Makefile after mersenne.cpp has been removed No functional change. Signed-off-by: Marco Costalba --- src/Makefile | 5 ++-- src/book.cpp | 10 +++---- src/position.cpp | 10 +++---- src/rkiss.h | 69 ++++++++++++++++++++++++++---------------------- 4 files changed, 48 insertions(+), 46 deletions(-) diff --git a/src/Makefile b/src/Makefile index 4433fad7..aed8271b 100644 --- a/src/Makefile +++ b/src/Makefile @@ -34,9 +34,8 @@ PGOBENCH = ./$(EXE) bench 32 1 10 default depth ### Object files OBJS = application.o bitboard.o pawns.o material.o endgame.o evaluate.o main.o \ - misc.o move.o movegen.o history.o movepick.o search.o piece.o \ - position.o direction.o tt.o uci.o ucioption.o \ - mersenne.o book.o bitbase.o san.o benchmark.o timeman.o + misc.o move.o movegen.o history.o movepick.o search.o piece.o position.o \ + direction.o tt.o uci.o ucioption.o book.o bitbase.o san.o benchmark.o timeman.o ### ========================================================================== diff --git a/src/book.cpp b/src/book.cpp index a34d17b7..2aca81cf 100644 --- a/src/book.cpp +++ b/src/book.cpp @@ -346,7 +346,7 @@ namespace { Book::Book() { for (int i = abs(get_system_time() % 10000); i > 0; i--) - RKiss.rand32(); + RKiss.rand(); } @@ -412,7 +412,7 @@ Move Book::get_move(const Position& pos, bool findBestMove) { BookEntry entry; int bookMove = MOVE_NONE; - int scoresSum = 0, bestScore = 0; + unsigned scoresSum = 0, bestScore = 0; uint64_t key = book_key(pos); // Choose a book move among the possible moves for the given position @@ -422,9 +422,7 @@ Move Book::get_move(const Position& pos, bool findBestMove) { if (entry.key != key) break; - int score = entry.count; - - assert(score > 0); + unsigned score = entry.count; // If findBestMove is true choose highest rated book move if (findBestMove) @@ -441,7 +439,7 @@ Move Book::get_move(const Position& pos, bool findBestMove) { // high score it has more probability to be choosen then a one with // lower score. Note that first entry is always chosen. scoresSum += score; - if (int(RKiss.rand32() % scoresSum) < score) + if (RKiss.rand() % scoresSum < score) bookMove = entry.move; } if (!bookMove) diff --git a/src/position.cpp b/src/position.cpp index e6261d3c..ae63f263 100644 --- a/src/position.cpp +++ b/src/position.cpp @@ -1763,16 +1763,16 @@ void Position::init_zobrist() { int i,j, k; for (i = 0; i < 2; i++) for (j = 0; j < 8; j++) for (k = 0; k < 64; k++) - zobrist[i][j][k] = Key(RKiss.rand64()); + zobrist[i][j][k] = RKiss.rand(); for (i = 0; i < 64; i++) - zobEp[i] = Key(RKiss.rand64()); + zobEp[i] = RKiss.rand(); for (i = 0; i < 16; i++) - zobCastle[i] = Key(RKiss.rand64()); + zobCastle[i] = RKiss.rand(); - zobSideToMove = Key(RKiss.rand64()); - zobExclusion = Key(RKiss.rand64()); + zobSideToMove = RKiss.rand(); + zobExclusion = RKiss.rand(); } diff --git a/src/rkiss.h b/src/rkiss.h index 6e94dc27..13f06407 100644 --- a/src/rkiss.h +++ b/src/rkiss.h @@ -27,51 +27,56 @@ ** *********************************************************************** **/ -#ifndef _RKISS_H_ -#define _RKISS_H_ +#if !defined(RKISS_H_INCLUDED) +#define RKISS_H_INCLUDED -/** Includes **/ -#include // srand(), rand() -#include // time() -#include "types.h" // (u)int8_t .. (u)int64_t +//// +//// Includes +//// -/** Random class **/ -class RKISS { +#include +#include -private: - // Keep variables always together - struct S { uint64_t a; uint64_t b; uint64_t c; uint64_t d; } s; +#include "types.h" - // Init seed and scramble a few rounds - void raninit ( uint64_t seed ) { - s.a = 0xf1ea5eed; s.b = s.c = s.d = seed; - for ( uint64_t i=0; i<8; i++ ) rand64(); - } -public: - // Instance seed random or implicite - RKISS() { ::srand ( (uint32_t)time(NULL) ); raninit ( (uint64_t)::rand() ); } - // RKISS( uint64_t s ) { raninit ( s ); } +//// +//// Types +//// - // (Re)init seed - // void init ( uint64_t seed ) { raninit ( seed ); } +class RKISS { - // Return 32 bit unsigned integer in between [0,2^32-1] - uint32_t rand32 () { return (uint32_t) rand64 (); } + // Keep variables always together + struct S { uint64_t a, b, c, d; } s; // Return 64 bit unsigned integer in between [0,2^64-1] - uint64_t rand64 () { - const uint64_t e = s.a - ((s.b<<7) | (s.b>>57)); - s.a = s.b ^ ((s.c<<13) | (s.c>>51)); - s.b = s.c + ((s.d<<37) | (s.d>>27)); + uint64_t rand64() { + + const uint64_t + e = s.a - ((s.b << 7) | (s.b >> 57)); + s.a = s.b ^ ((s.c << 13) | (s.c >> 51)); + s.b = s.c + ((s.d << 37) | (s.d >> 27)); s.c = s.d + e; return s.d = e + s.a; } - // Return double in between [0,1). Keep full 53 bit mantissa - // double frand () { return (int64_t)(rand64()>>11) * (1.0/(67108864.0*134217728.0)); } + // Init seed and scramble a few rounds + void raninit(uint64_t seed) { + + s.a = 0xf1ea5eed; + s.b = s.c = s.d = seed; + for (uint64_t i = 0; i < 8; i++) + rand64(); + } + +public: + // Instance seed random or implicite + RKISS() { ::srand(uint32_t(time(NULL))); raninit(uint64_t(::rand())); } + + // Return random number of type T (must be castable from uint64_t) + template + T rand() { return T(rand64()); } }; -// _RKISS_H_ -#endif +#endif // !defined(RKISS_H_INCLUDED) -- 2.39.2