-
-
Save orlp/d422f063dafc5e7c7b1c to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
#include <iomanip> | |
// Expected value of an n-sided die. | |
double E_die(int n) { | |
return (n + 1) / 2.; | |
} | |
// Variance of an n-sided die. | |
double V_die(int n) { | |
double u = E_die(n); | |
double p = 1. / n; | |
double var = 0.; | |
for (int i = 1; i <= n; ++i) { | |
double t = (i - u); | |
var += t*t*p; | |
} | |
return var; | |
} | |
int main(int argc, char** argv) { | |
// The expectation of a random sum of N random variables: | |
// | |
// | N | | |
// E | sum X_i | = E[N]E[X] | |
// | i=1 | | |
// | |
double E_T = E_die(4); | |
double E_C = E_T * E_die(6); | |
double E_O = E_C * E_die(8); | |
double E_D = E_O * E_die(12); | |
double E_I = E_D * E_die(20); | |
// The variance of a random sum of N random variables: | |
// | |
// | N | | |
// Var | sum X_i | = E[N] * Var[X] + E[X]^2 * Var[N] | |
// | i=1 | | |
// | |
// So the variance of the sum of 1-4 6-sided die rolls is: | |
// E_die(4) * V_die(6) + sq(E_die(6)) * V_die(4) | |
double V_T = V_die(4); | |
double V_C = V_T * sq(E_die(6)) + E_T * V_die(6); | |
double V_O = V_C * sq(E_die(8)) + E_C * V_die(8); | |
double V_D = V_O * sq(E_die(12)) + E_O * V_die(12); | |
double V_I = V_D * sq(E_die(20)) + E_D * V_die(20); | |
std::cout << std::fixed << std::setprecision(4) << V_I << "\n"; | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment