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:
parent
840605c14e
commit
efe702e9f5
2 changed files with 12 additions and 17 deletions
3
AUTHORS
3
AUTHORS
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Add table
Reference in a new issue