along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#include <algorithm>
#include <cassert>
#include <cmath>
#include <cstring> // For std::memset
: ttHit ? tte->move() : MOVE_NONE;
ttPv = (ttHit && tte->is_pv()) || (PvNode && depth > 4 * ONE_PLY);
- // If position has been searched at higher depths and we are shuffling,
- // return value_draw.
- if ( pos.rule50_count() > 36 - 6 * (pos.count<ALL_PIECES>() > 14)
- && ss->ply > 36 - 6 * (pos.count<ALL_PIECES>() > 14)
- && ttHit
- && tte->depth() > depth
- && pos.count<PAWN>() > 0)
- return VALUE_DRAW;
-
// At non-PV nodes we check for an early TT cutoff
if ( !PvNode
&& ttHit
&& move == ttMove
&& !rootNode
&& !excludedMove // Avoid recursive singular search
- /* && ttValue != VALUE_NONE Already implicit in the next condition */
+ /* && ttValue != VALUE_NONE Already implicit in the next condition */
&& abs(ttValue) < VALUE_KNOWN_WIN
&& (tte->bound() & BOUND_LOWER)
&& tte->depth() >= depth - 3 * ONE_PLY
// Shuffle extension
else if ( PvNode
&& pos.rule50_count() > 18
- && ss->ply > 18
&& depth < 3 * ONE_PLY
- && ss->ply < 3 * thisThread->rootDepth / ONE_PLY) // To avoid infinite loops
+ && ss->ply < 3 * thisThread->rootDepth / ONE_PLY) // To avoid too deep searches
extension = ONE_PLY;
// Passed pawn extension
}
- // 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.
+ // qsearch() is the quiescence search function, which is called by the main search
+ // function with zero depth, or recursively with further decreasing depth per call.
template <NodeType NT>
Value qsearch(Position& pos, Stack* ss, Value alpha, Value beta, Depth depth) {