1
0
Fork 0
mirror of https://github.com/sockspls/badfish synced 2025-04-30 08:43:09 +00:00

qsearch(): remove inCheck as a template parameter

Simplifies a bit, and avoids bugs as in #1478

Passed STC:
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 104862 W: 21302 L: 21337 D: 62223
http://tests.stockfishchess.org/tests/view/5aa6de1b0ebc590297810097

Closes https://github.com/official-stockfish/Stockfish/pull/1484

No functional change
This commit is contained in:
Joost VandeVondele 2018-03-13 08:10:59 +01:00 committed by Stéphane Nicolet
parent 840605c14e
commit efe702e9f5
2 changed files with 12 additions and 17 deletions

View file

@ -77,16 +77,17 @@ Lucas Braesch (lucasart)
Lyudmil Antonov (lantonov)
Matthew Lai (matthewlai)
Matthew Sullivan
mbootsector
Michael Byrne (MichaelB7)
Michael Stembera (mstembera)
Michel Van den Bergh (vdbergh)
Mikael Bäckman (mbootsector)
Mike Whiteley (protonspring)
Miroslav Fontán (Hexik)
Mohammed Li (tthsqe12)
Nathan Rugg (nmrugg)
Nicklas Persson (NicklasPersson)
Niklas Fiekas (niklasf)
noobpwnftw
Oskar Werkelin Ahlin
Pablo Vazquez
Pascal Romaret

View file

@ -101,7 +101,7 @@ namespace {
template <NodeType NT>
Value search(Position& pos, Stack* ss, Value alpha, Value beta, Depth depth, bool cutNode, bool skipEarlyPruning);
template <NodeType NT, bool InCheck>
template <NodeType NT>
Value qsearch(Position& pos, Stack* ss, Value alpha, Value beta, Depth depth = DEPTH_ZERO);
Value value_to_tt(Value v, int ply);
@ -690,12 +690,12 @@ namespace {
{
if ( depth == ONE_PLY
&& eval + RazorMargin1 <= alpha)
return qsearch<NonPV, false>(pos, ss, alpha, alpha+1);
return qsearch<NonPV>(pos, ss, alpha, alpha+1);
else if (eval + RazorMargin2 <= alpha)
{
Value ralpha = alpha - RazorMargin2;
Value v = qsearch<NonPV, false>(pos, ss, ralpha, ralpha+1);
Value v = qsearch<NonPV>(pos, ss, ralpha, ralpha+1);
if (v <= ralpha)
return v;
@ -724,7 +724,7 @@ namespace {
ss->contHistory = thisThread->contHistory[NO_PIECE][0].get();
pos.do_null_move(st);
Value nullValue = depth-R < ONE_PLY ? -qsearch<NonPV, false>(pos, ss+1, -beta, -beta+1)
Value nullValue = depth-R < ONE_PLY ? -qsearch<NonPV>(pos, ss+1, -beta, -beta+1)
: - search<NonPV>(pos, ss+1, -beta, -beta+1, depth-R, !cutNode, true);
pos.undo_null_move();
@ -742,7 +742,7 @@ namespace {
thisThread->nmp_ply = ss->ply + 3 * (depth-R) / 4;
thisThread->nmp_odd = ss->ply % 2;
Value v = depth-R < ONE_PLY ? qsearch<NonPV, false>(pos, ss, beta-1, beta)
Value v = depth-R < ONE_PLY ? qsearch<NonPV>(pos, ss, beta-1, beta)
: search<NonPV>(pos, ss, beta-1, beta, depth-R, false, true);
thisThread->nmp_odd = thisThread->nmp_ply = 0;
@ -1013,9 +1013,7 @@ moves_loop: // When in check, search starts from here
// Step 17. Full depth search when LMR is skipped or fails high
if (doFullDepthSearch)
value = newDepth < ONE_PLY ?
givesCheck ? -qsearch<NonPV, true>(pos, ss+1, -(alpha+1), -alpha)
: -qsearch<NonPV, false>(pos, ss+1, -(alpha+1), -alpha)
value = newDepth < ONE_PLY ? -qsearch<NonPV>(pos, ss+1, -(alpha+1), -alpha)
: - search<NonPV>(pos, ss+1, -(alpha+1), -alpha, newDepth, !cutNode, false);
// For PV nodes only, do a full PV search on the first move or after a fail
@ -1026,9 +1024,7 @@ moves_loop: // When in check, search starts from here
(ss+1)->pv = pv;
(ss+1)->pv[0] = MOVE_NONE;
value = newDepth < ONE_PLY ?
givesCheck ? -qsearch<PV, true>(pos, ss+1, -beta, -alpha)
: -qsearch<PV, false>(pos, ss+1, -beta, -alpha)
value = newDepth < ONE_PLY ? -qsearch<PV>(pos, ss+1, -beta, -alpha)
: - search<PV>(pos, ss+1, -beta, -alpha, newDepth, false, false);
}
@ -1158,17 +1154,16 @@ moves_loop: // When in check, search starts from here
// qsearch() is the quiescence search function, which is called by the main
// search function with depth zero, or recursively with depth less than ONE_PLY.
template <NodeType NT, bool InCheck>
template <NodeType NT>
Value qsearch(Position& pos, Stack* ss, Value alpha, Value beta, Depth depth) {
const bool PvNode = NT == PV;
const bool InCheck = bool(pos.checkers());
assert(alpha >= -VALUE_INFINITE && alpha < beta && beta <= VALUE_INFINITE);
assert(PvNode || (alpha == beta - 1));
assert(depth <= DEPTH_ZERO);
assert(depth / ONE_PLY * ONE_PLY == depth);
assert(InCheck == bool(pos.checkers()));
Move pv[MAX_PLY+1];
StateInfo st;
@ -1320,8 +1315,7 @@ moves_loop: // When in check, search starts from here
// Make and search the move
pos.do_move(move, st, givesCheck);
value = givesCheck ? -qsearch<NT, true>(pos, ss+1, -beta, -alpha, depth - ONE_PLY)
: -qsearch<NT, false>(pos, ss+1, -beta, -alpha, depth - ONE_PLY);
value = -qsearch<NT>(pos, ss+1, -beta, -alpha, depth - ONE_PLY);
pos.undo_move(move);
assert(value > -VALUE_INFINITE && value < VALUE_INFINITE);