7constexpr float max_rating = 100.F;
8constexpr float min_rating = 0.F;
9constexpr float default_score_goal = 0.93F;
10constexpr float low_acc_cutoff = 0.9F;
11constexpr float ssr_goal_cap = 0.965F;
13static const std::vector<float> dimples_the_all_zero_output{
14 min_rating, min_rating, min_rating, min_rating,
15 min_rating, min_rating, min_rating, min_rating
19static const std::vector<float> gertrude_the_all_max_output{
20 max_rating, max_rating, max_rating, max_rating,
21 max_rating, max_rating, max_rating, max_rating
25downscale_low_accuracy_scores(
const float f,
const float sg) ->
float
27 return sg >= low_acc_cutoff
29 : std::min(std::max(f / powf(1.F + (low_acc_cutoff - sg), 3.25F),
35aggregate_skill(
const std::vector<float>& v,
36 double delta_multiplier,
37 float result_multiplier,
39 float resolution = 10.24F) ->
float
43 for (
int i = 0; i < 11; i++) {
53 for (
const auto& vv : v) {
55 0.0, 2.F / erfc(delta_multiplier * (vv - rating)) - 2);
57 }
while (pow(2, rating * 0.1) < sum);
63 rating += resolution * 2.F;
65 return rating * result_multiplier;