]> git.sesse.net Git - foosball/blobdiff - foosrank.cpp
Change a few divs by constants to muls.
[foosball] / foosrank.cpp
index 25298e7ddfe0bdc16590ab98e806dd8150401a1e..4b44706fe67fd77bcacadbfbe4093281a4c734b8 100644 (file)
@@ -122,9 +122,10 @@ static void compute_opponent_rating_pdf(int k, int a, double mu2, double sigma2,
                func1[i].real() = func1[i].imag() = func2[i].real() = func2[i].imag() = 0.0;
        }
 
+       double invsigma2 = 1.0 / sigma2;
        for (int i = 0; i < sz; ++i) {
                double x1 = 0.0 + h*i;
-               double z = (x1 - mu2)/sigma2;
+               double z = (x1 - mu2) * invsigma2;
                func1[i].real() = exp(-(z*z/2.0));
 
                double x2 = -3000.0 + h*i;
@@ -360,6 +361,8 @@ static void compute_new_double_rating(double mu1, double sigma1, double mu2, dou
                compute_opponent_rating_pdf(score2, score1, mu_t, sigma_t, 1.0, curve);
        }
 
+       newcurve.reserve(curve.size());
+
        // iterate over r1
        double h = 3000.0 / curve.size();
        for (unsigned i = 0; i < curve.size(); ++i) {
@@ -370,11 +373,12 @@ static void compute_new_double_rating(double mu1, double sigma1, double mu2, dou
                double r1 = i * h;
 
                // iterate over r2
+               double invsigma2 = 1.0 / sigma2;
                for (unsigned j = 0; j < curve.size(); ++j) {
                        double r1plusr2 = curve[j].first;
                        double r2 = r1plusr2 - r1;
 
-                       double z = (r2 - mu2) sigma2;
+                       double z = (r2 - mu2) * invsigma2;
                        double gaussian = exp(-(z*z/2.0));
                        sum += curve[j].second * gaussian;
                }