From f83a6f54e434bcc627b236bae93347dcdb3ac086 Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Wed, 27 Apr 2016 09:16:12 +0200 Subject: [PATCH] Retire subfactor() Directly lookup in Binomial[] table. --- src/syzygy/tbprobe.cpp | 22 +++------------------- 1 file changed, 3 insertions(+), 19 deletions(-) diff --git a/src/syzygy/tbprobe.cpp b/src/syzygy/tbprobe.cpp index 63eff847..802c35ba 100644 --- a/src/syzygy/tbprobe.cpp +++ b/src/syzygy/tbprobe.cpp @@ -751,22 +751,6 @@ uint64_t encode_pawn(uint8_t pawns[], uint8_t *norm, Square *pos, int *factor, i return idx; } -// place k like pieces on n squares -int subfactor(int k, int n) -{ - assert(n > 0 && k > 0 && k <= n); - - int numerator = n; - int denominator = 1; - - for (int i = 1; i < k; ++i) { - numerator *= n - i; - denominator *= i + 1; - } - - return numerator / denominator; -} - template uint64_t set_factors(T& p, int num, int order) { @@ -779,7 +763,7 @@ uint64_t set_factors(T& p, int num, int order) result *= p.hasUniquePieces ? 31332 : 462; } else { p.factor[i] = (int)result; - result *= subfactor(p.norm[i], n); + result *= Binomial[p.norm[i] - 1][n]; n -= p.norm[i]; i += p.norm[i]; } @@ -806,10 +790,10 @@ uint64_t calc_factors_pawn(int *factor, int num, int order, int order2, uint8_t result *= Pfactor[norm[0] - 1][f]; } else if (k == order2) { factor[norm[0]] = (int)result; - result *= subfactor(norm[norm[0]], 48 - norm[0]); + result *= Binomial[norm[norm[0]] - 1][48 - norm[0]]; } else { factor[i] = (int)result; - result *= subfactor(norm[i], n); + result *= Binomial[norm[i] - 1][n]; n -= norm[i]; i += norm[i]; }