[cpp] DiceCoin

Viewer

copydownloadembedprintName: DiceCoin
  1. using namespace std;
  2. #include <iostream>
  3. #include <cmath>
  4.  
  5. const double p = 0.308;
  6.  
  7. int choose(int n, int k);
  8. double dbinom(int k, int n, double p);
  9. double PD(int D);
  10. double PND(int N, int D);
  11. double PN(int N);
  12. double EX();
  13. double PDN(int D, int N);
  14. double EY();
  15. double PNnD(int N, int D);
  16. double END();
  17.  
  18. int main(int argc, char const *argv[])
  19. {
  20.     double E_X = EX();
  21.     cout << "E[X] = " << E_X << endl;
  22.     cout << endl;
  23.  
  24.     double E_Y = EY();
  25.     cout << "E[Y] = " << E_Y << endl;
  26.     cout << endl;
  27.  
  28.     double E_ND = END();
  29.     cout << "E[ND] = " << E_ND << endl;
  30.     cout << endl;
  31.  
  32.     return 0;
  33. }
  34.  
  35. int choose(int n, int k)
  36. {
  37.     if (< k)
  38.         return 0;
  39.     if (== k || k == 0)
  40.         return 1;
  41.  
  42.     return choose(- 1, k) + choose(- 1, k - 1);
  43. }
  44.  
  45. double dbinom(int k, int n, double p)
  46. {
  47.     return choose(n, k) * pow(p, k) * pow(1 - p, n - k);
  48. }
  49.  
  50. double PD(int D)
  51. {
  52.     if (>= 1 && D <= 12)
  53.         return 1.0 / 12.0;
  54.  
  55.     return 0;
  56. }
  57.  
  58. double PND(int N, int D)
  59. {
  60.     return dbinom(N, D, p);
  61. }
  62.  
  63. double PN(int N)
  64. {
  65.     double sum = 0;
  66.     for (int D = N; D <= 12; D++)
  67.     {
  68.         sum += PND(N, D) * PD(D);
  69.     }
  70.     return sum;
  71. }
  72.  
  73. double EX()
  74. {
  75.     double sum = 0;
  76.     cout << "P(N)s: ";
  77.     for (int N = 0; N <= 12; N++)
  78.     {
  79.         double P = PN(N);
  80.         cout << P << ", ";
  81.         sum += N * P;
  82.     }
  83.     cout << "\b\b " << endl;
  84.     return sum;
  85. }
  86.  
  87. double PDN(int D, int N)
  88. {
  89.     return PND(N, D) * PD(D) / PN(N);
  90. }
  91.  
  92. double EY()
  93. {
  94.     double sum = 0;
  95.     cout << "P(D|N=6)s: ";
  96.     for (int D = 1; D <= 12; D++)
  97.     {
  98.         double P = PDN(D, 6);
  99.         cout << P << ", ";
  100.         sum += D * P;
  101.     }
  102.     cout << "\b\b " << endl;
  103.     return sum;
  104. }
  105.  
  106. double PNnD(int N, int D)
  107. {
  108.     return PD(D) * PND(N, D);
  109. }
  110.  
  111. double END()
  112. {
  113.     double sum = 0;
  114.     cout << "P(NnD)s: ";
  115.     for (int D = 1; D <= 12; D++)
  116.     {
  117.         for (int N = 0; N <= 12; N++)
  118.         {
  119.             double P = PNnD(N, D);
  120.             cout << P << ", ";
  121.             sum += N * D * P;
  122.         }
  123.     }
  124.     cout << "\b\b " << endl;
  125.     return sum;
  126. }
  127.  

Editor

You can edit this paste and save as new:


File Description
  • DiceCoin
  • Paste Code
  • 19 Apr-2024
  • 2.13 Kb
You can Share it: