summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
ed19a9f)
Standard does not mandate std::sort() to be stable, so we
can have, and actually do have different node count on
different platforms.
So use the platform independent std::stable_sort() and gain
same functionality on any platform (Windows, Unix, Mac OS)
and with any compiler (MSVC, gcc or Intel C++).
This sort is teoretically slower, but profiling shows only a very
minimal drop in performance, probably due to the fact that
the set to sort is very small, mainly only captures and with
less frequency non-captures, anyhow we are talking of 30-40 moves
in the worst average case. Sorting alghortims are build to work on
thousands or even milions of elements. With such small sets
performance difference seems not noticable.
After 999 games at 1+0
Mod vs Orig +234 =523 -242 -3 ELO
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
-// Note that operator< is set up such that std::sort() will sort in descending order
+// Note that operator< is set up such that std::stable_sort() will sort in descending order
inline bool operator<(const MoveStack& f, const MoveStack& s) { return s.score < f.score; }
inline bool operator<(const MoveStack& f, const MoveStack& s) { return s.score < f.score; }
case PH_GOOD_CAPTURES:
lastMove = generate_captures(pos, moves);
score_captures();
case PH_GOOD_CAPTURES:
lastMove = generate_captures(pos, moves);
score_captures();
- std::sort(moves, lastMove);
+ std::stable_sort(moves, lastMove);
case PH_NONCAPTURES:
lastMove = generate_noncaptures(pos, moves);
score_noncaptures();
case PH_NONCAPTURES:
lastMove = generate_noncaptures(pos, moves);
score_noncaptures();
- std::sort(moves, lastMove);
+ std::stable_sort(moves, lastMove);
return;
case PH_BAD_CAPTURES:
return;
case PH_BAD_CAPTURES:
// to get SEE move ordering.
curMove = badCaptures;
lastMove = lastBadCapture;
// to get SEE move ordering.
curMove = badCaptures;
lastMove = lastBadCapture;
- std::sort(badCaptures, lastMove);
+ std::stable_sort(badCaptures, lastMove);
return;
case PH_EVASIONS:
assert(pos.is_check());
lastMove = generate_evasions(pos, moves, pinned);
score_evasions();
return;
case PH_EVASIONS:
assert(pos.is_check());
lastMove = generate_evasions(pos, moves, pinned);
score_evasions();
- std::sort(moves, lastMove);
+ std::stable_sort(moves, lastMove);
return;
case PH_QCAPTURES:
lastMove = generate_captures(pos, moves);
score_captures();
return;
case PH_QCAPTURES:
lastMove = generate_captures(pos, moves);
score_captures();
- std::sort(moves, lastMove);
+ std::stable_sort(moves, lastMove);
for (Options::const_iterator it = options.begin(); it != options.end(); ++it)
vec.push_back(it->second);
for (Options::const_iterator it = options.begin(); it != options.end(); ++it)
vec.push_back(it->second);
- std::sort(vec.begin(), vec.end());
+ std::stable_sort(vec.begin(), vec.end());
for (std::vector<Option>::const_iterator it = vec.begin(); it != vec.end(); ++it)
{
for (std::vector<Option>::const_iterator it = vec.begin(); it != vec.end(); ++it)
{