diff --git a/src/search.cpp b/src/search.cpp index b61a21ad..897121fd 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -317,7 +317,7 @@ void Thread::search() { multiPV = std::min(multiPV, rootMoves.size()); - int ct = Options["Contempt"] * PawnValueEg / 100; // From centipawns + int ct = int(Options["Contempt"]) * PawnValueEg / 100; // From centipawns // In analysis mode, adjust contempt in accordance with user preference if (Limits.infinite || Options["UCI_AnalyseMode"]) @@ -1632,9 +1632,9 @@ bool RootMove::extract_ponder_from_tt(Position& pos) { void Tablebases::rank_root_moves(Position& pos, Search::RootMoves& rootMoves) { RootInTB = false; - UseRule50 = Options["Syzygy50MoveRule"]; - ProbeDepth = Options["SyzygyProbeDepth"] * ONE_PLY; - Cardinality = Options["SyzygyProbeLimit"]; + UseRule50 = bool(Options["Syzygy50MoveRule"]); + ProbeDepth = int(Options["SyzygyProbeDepth"]) * ONE_PLY; + Cardinality = int(Options["SyzygyProbeLimit"]); bool dtz_available = true; // Tables with fewer pieces than SyzygyProbeLimit are searched with diff --git a/src/uci.h b/src/uci.h index 0788bda2..3ad3a309 100644 --- a/src/uci.h +++ b/src/uci.h @@ -49,12 +49,12 @@ public: Option(OnChange = nullptr); Option(bool v, OnChange = nullptr); Option(const char* v, OnChange = nullptr); - Option(int v, int minv, int maxv, OnChange = nullptr); + Option(double v, int minv, int maxv, OnChange = nullptr); Option(const char* v, const char *cur, OnChange = nullptr); Option& operator=(const std::string&); void operator<<(const Option&); - operator int() const; + operator double() const; operator std::string() const; bool operator==(const char*); diff --git a/src/ucioption.cpp b/src/ucioption.cpp index d281d40d..80efb87a 100644 --- a/src/ucioption.cpp +++ b/src/ucioption.cpp @@ -92,11 +92,13 @@ std::ostream& operator<<(std::ostream& os, const OptionsMap& om) { const Option& o = it.second; os << "\noption name " << it.first << " type " << o.type; - if (o.type != "button") + if (o.type == "string" || o.type == "check" || o.type == "combo") os << " default " << o.defaultValue; if (o.type == "spin") - os << " min " << o.min << " max " << o.max; + os << " default " << int(stof(o.defaultValue)) + << " min " << o.min + << " max " << o.max; break; } @@ -116,15 +118,15 @@ Option::Option(bool v, OnChange f) : type("check"), min(0), max(0), on_change(f) Option::Option(OnChange f) : type("button"), min(0), max(0), on_change(f) {} -Option::Option(int v, int minv, int maxv, OnChange f) : type("spin"), min(minv), max(maxv), on_change(f) +Option::Option(double v, int minv, int maxv, OnChange f) : type("spin"), min(minv), max(maxv), on_change(f) { defaultValue = currentValue = std::to_string(v); } Option::Option(const char* v, const char* cur, OnChange f) : type("combo"), min(0), max(0), on_change(f) { defaultValue = v; currentValue = cur; } -Option::operator int() const { +Option::operator double() const { assert(type == "check" || type == "spin"); - return (type == "spin" ? stoi(currentValue) : currentValue == "true"); + return (type == "spin" ? stof(currentValue) : currentValue == "true"); } Option::operator std::string() const { @@ -160,7 +162,7 @@ Option& Option::operator=(const string& v) { if ( (type != "button" && v.empty()) || (type == "check" && v != "true" && v != "false") - || (type == "spin" && (stoi(v) < min || stoi(v) > max))) + || (type == "spin" && (stof(v) < min || stof(v) > max))) return *this; if (type != "button")