- if (ss[ply].eval + pos.endgame_value_of_piece_on(move_to(move)) + preFutilityValueMargin + ei.futilityMargin + 90 < beta)
+ Value futilityCaptureValue = ss[ply].eval + pos.endgame_value_of_piece_on(move_to(move)) + preFutilityValueMargin + ei.futilityMargin + 90;
+
+ if (futilityCaptureValue < beta)
+ {
+ if (futilityCaptureValue > bestValue)
+ bestValue = futilityCaptureValue;
bool isCheck = pos.is_check();
bool useFutilityPruning = sp->depth < SelectiveDepth
&& !isCheck;
const int FutilityMoveCountMargin = 3 + (1 << (3 * int(sp->depth) / 8));
bool isCheck = pos.is_check();
bool useFutilityPruning = sp->depth < SelectiveDepth
&& !isCheck;
const int FutilityMoveCountMargin = 3 + (1 << (3 * int(sp->depth) / 8));
assert(move_is_ok(move));
bool moveIsCheck = pos.move_is_check(move, ci);
bool captureOrPromotion = pos.move_is_capture_or_promotion(move);
assert(move_is_ok(move));
bool moveIsCheck = pos.move_is_check(move, ci);
bool captureOrPromotion = pos.move_is_capture_or_promotion(move);
bool dangerous;
Depth ext = extension(pos, move, false, captureOrPromotion, moveIsCheck, false, false, &dangerous);
Depth newDepth = sp->depth - OnePly + ext;
bool dangerous;
Depth ext = extension(pos, move, false, captureOrPromotion, moveIsCheck, false, false, &dangerous);
Depth newDepth = sp->depth - OnePly + ext;
// If this is the master thread and we have been asked to stop because of
// a beta cutoff higher up in the tree, stop all slave threads.
// If this is the master thread and we have been asked to stop because of
// a beta cutoff higher up in the tree, stop all slave threads.
- bool moveIsCheck = pos.move_is_check(move, ci);
- bool captureOrPromotion = pos.move_is_capture_or_promotion(move);
+ moveCount = ++sp->moves;
+ lock_release(&(sp->lock));
- lock_grab(&(sp->lock));
- int moveCount = ++sp->moves;
- lock_release(&(sp->lock));
+ bool moveIsCheck = pos.move_is_check(move, ci);
+ bool captureOrPromotion = pos.move_is_capture_or_promotion(move);
bool dangerous;
Depth ext = extension(pos, move, true, captureOrPromotion, moveIsCheck, false, false, &dangerous);
Depth newDepth = sp->depth - OnePly + ext;
bool dangerous;
Depth ext = extension(pos, move, true, captureOrPromotion, moveIsCheck, false, false, &dangerous);
Depth newDepth = sp->depth - OnePly + ext;
// If this is the master thread and we have been asked to stop because of
// a beta cutoff higher up in the tree, stop all slave threads.
// If this is the master thread and we have been asked to stop because of
// a beta cutoff higher up in the tree, stop all slave threads.