+}
+
+/*
+ * diff(priorlogL, sigma) = w ( (x - mu)² - sigma² ) / sigma³
+ * maximizer for sigma is given by: sum_i[ (w_i/sigma)³ ((x - mu)² - sigma²) ] = 0
+ * sum_i[ w_i ( (x - mu)² - sigma² ) ] = 0 |: sigma != 0
+ * sum_i[ w_i (x - mu)² ] = sum[ w_i sigma² ]
+ * sigma = sqrt( sum_i[ w_i (x - mu)² ] / sum[w_i] )
+ */
+void update_prior_sigma(float *mu, float *sigma, int num_players)
+{
+ float nom = 0.0f, denom = 0.0f;
+ for (int i = 0; i < num_players; ++i) {
+ float mu1 = mu[i];
+
+ nom += ((mu1 - PRIOR_MU) * (mu1 - PRIOR_MU));
+ denom += 1.0f;
+ }
+
+ prior_sigma = sqrt(nom / denom);
+ if (!(prior_sigma > 40.0f)) {
+ prior_sigma = 40.0f;
+ }
+}
+
+float compute_logl(float z)
+{
+ return -0.5 * (log(2.0f / M_PI) + z * z);
+}
+
+float compute_total_logl(float *mu, float *sigma, int num_players)
+{
+ float total_logl = 0.0f;
+
+ // Prior.