8 FC_ASSERT(base_n > 0,
"Numerator must be positive and non zero");
9 FC_ASSERT(base_d > 0,
"Denominator must be positive and non zero");
10 FC_ASSERT(base_n > base_d,
"Numerator must be more then denominator (inverted probability = (0, 1))");
11 auto base = utils::make_fraction(base_n, base_d);
12 _base = std::tie(
base.numerator,
base.denominator);
21 return utils::make_fraction(std::get<0>(_base), std::get<1>(_base));
26 return utils::make_fraction(std::get<0>(_simplified), std::get<1>(_simplified));
31 return utils::make_fraction(std::get<0>(_inverted), std::get<1>(_inverted));
37 std::string s = fc::trim(from);
38 auto slash_pos = s.find(
'/');
39 FC_ASSERT(std::string::npos != slash_pos);
41 auto n_str = s.substr(0, slash_pos);
42 FC_ASSERT(!n_str.empty());
43 auto n = fc::to_int64(n_str);
44 FC_ASSERT(n > 0 && n <= (int64_t)std::numeric_limits<odds_value_type>::max());
46 auto d_str = s.substr(slash_pos + 1);
47 FC_ASSERT(!d_str.empty());
48 auto d = fc::to_int64(d_str);
49 FC_ASSERT(d > 0 && d <= (int64_t)std::numeric_limits<odds_value_type>::max());
57 std::string
result = fc::to_string(f.numerator);
59 result += fc::to_string(f.denominator);
68 auto base = var.
base();
69 vo = fc::mutable_variant_object()(
"numerator", base.numerator)(
"denominator", base.denominator);
76 const auto& variant_obj = var.get_object();
std::string to_string() const
static odds from_string(const std::string &from)
odds_fraction_type simplified() const
odds_fraction_type base() const
odds_fraction_type inverted() const
void to_variant(const game_type &game, fc::variant &var)
void from_variant(const fc::variant &var, game_type &game)
utils::fraction< odds_value_type, odds_value_type > odds_fraction_type