fork download
  1. #include <vector>
  2. #include <string>
  3. #include <algorithm>
  4. #include <iostream>
  5. #include <iomanip>
  6. #include <random>
  7.  
  8. using namespace std;
  9.  
  10.  
  11. double Xi[20][2] = // For \alpha = 0.10 && 0.05
  12. {
  13. { 2.7, 3.8 }, // 1
  14. { 4.6, 5.9 },
  15. { 6.3, 7.8 },
  16. { 7.8, 9.5 },
  17. { 9.2, 11.1 },
  18. { 10.6, 12.6 },
  19. { 12.0, 14.1 },
  20. { 13.4, 15.5 },
  21. { 14.7, 16.9 },
  22. { 16.0, 18.3 },
  23. { 17.3, 19.7 },
  24. { 18.5, 21.0 },
  25. { 19.8, 22.4 },
  26. { 21.1, 23.7 },
  27. { 22.3, 25.0 },
  28. { 23.5, 26.3 },
  29. { 24.8, 27.6 },
  30. { 26.0, 28.9 },
  31. { 27.2, 30.1 },
  32. { 40.3, 43.8 } // > 30...
  33. };
  34.  
  35.  
  36. default_random_engine g(random_device{}());
  37.  
  38.  
  39. void Experiment(int N, int Count = 10000)
  40. {
  41. uniform_int_distribution<> dis(0, N-1);
  42. vector<int> r(N), u(N);
  43. for(int i = 0; i < Count; ++i)
  44. {
  45. r[rand()%N]++;
  46. u[dis(g)]++;
  47. }
  48. double rs = 0, us = 0;
  49. for(int i = 0; i < N; ++i)
  50. {
  51. double d = double(r[i])/Count - 1./N;
  52. rs += d*d;
  53. d = double(u[i])/Count - 1./N;
  54. us += d*d;
  55. }
  56.  
  57. rs = rs * Count * N;
  58. us = us * Count * N;
  59.  
  60. double xi = (N < 20) ? Xi[N-2][1] : Xi[19][1];
  61.  
  62.  
  63. cout << setw(2) << N << " " << fixed << setprecision(1)
  64. << setw(5) << xi << " " << setprecision(2)
  65. << setw(7) << rs << ( rs < xi ? " ok " : " fail")
  66. << " "
  67. << setw(7) << us << ( us < xi ? " ok " : " fail")
  68. << endl;
  69. }
  70.  
  71.  
  72.  
  73. int main(int argc, char * argv[])
  74. {
  75. srand(time(0));
  76. for (int Count = 10; Count <= 100000; Count *= 10)
  77. {
  78. cout << "\n\nValues count = " << Count << "\n";
  79. cout << " N xi(0.05) rand()%N uniform\n";
  80. cout << "-----------------------------------------\n";
  81. for(int N = 2; N < 40; ++N) Experiment(N,Count);
  82. }
  83.  
  84. }
Success #stdin #stdout 0.19s 5476KB
stdin
Standard input is empty
stdout

Values count = 10
 N  xi(0.05)    rand()%N          uniform
-----------------------------------------
 2     3.8      0.00  ok          0.00  ok  
 3     5.9      0.20  ok          6.20  fail
 4     7.8      3.60  ok          4.40  ok  
 5     9.5      4.00  ok          7.00  ok  
 6    11.1      4.40  ok          6.80  ok  
 7    12.6      1.20  ok          4.00  ok  
 8    14.1      4.40  ok          4.40  ok  
 9    15.5      6.20  ok          8.00  ok  
10    16.9     10.00  ok          8.00  ok  
11    18.3      7.60  ok         12.00  ok  
12    19.7     14.00  ok          9.20  ok  
13    21.0      5.60  ok         21.20  fail
14    22.4     18.00  ok          6.80  ok  
15    23.7      8.00  ok          8.00  ok  
16    25.0      6.00  ok         15.60  ok  
17    26.3     13.80  ok         10.40  ok  
18    27.6     11.60  ok         22.40  ok  
19    28.9     16.60  ok         24.20  ok  
20    43.8     14.00  ok         18.00  ok  
21    43.8     23.60  ok         23.60  ok  
22    43.8     16.40  ok         29.60  ok  
23    43.8     17.60  ok         26.80  ok  
24    43.8     23.60  ok         14.00  ok  
25    43.8     20.00  ok         40.00  ok  
26    43.8     26.40  ok         36.80  ok  
27    43.8     17.00  ok         27.80  ok  
28    43.8     23.60  ok         23.60  ok  
29    43.8     24.80  ok         24.80  ok  
30    43.8     26.00  ok         20.00  ok  
31    43.8     33.40  ok         27.20  ok  
32    43.8     28.40  ok         28.40  ok  
33    43.8     23.00  ok         23.00  ok  
34    43.8     30.80  ok         30.80  ok  
35    43.8     32.00  ok         25.00  ok  
36    43.8     33.20  ok         33.20  ok  
37    43.8     34.40  ok         34.40  ok  
38    43.8     28.00  ok         35.60  ok  
39    43.8     52.40  fail       29.00  ok  


Values count = 100
 N  xi(0.05)    rand()%N          uniform
-----------------------------------------
 2     3.8      0.36  ok          0.36  ok  
 3     5.9      0.50  ok          0.32  ok  
 4     7.8      0.88  ok          2.64  ok  
 5     9.5      4.80  ok          3.70  ok  
 6    11.1      4.04  ok          3.32  ok  
 7    12.6      7.38  ok          7.80  ok  
 8    14.1      7.04  ok          6.88  ok  
 9    15.5      9.62  ok          4.76  ok  
10    16.9      6.00  ok          3.40  ok  
11    18.3      6.70  ok          8.90  ok  
12    19.7      7.28  ok          7.28  ok  
13    21.0      7.64  ok         13.62  ok  
14    22.4     12.28  ok         11.44  ok  
15    23.7     26.60  fail       11.90  ok  
16    25.0     18.40  ok         16.48  ok  
17    26.3      6.42  ok         14.24  ok  
18    27.6     15.20  ok         27.44  ok  
19    28.9     28.44  ok         19.70  ok  
20    43.8     10.00  ok         36.80  ok  
21    43.8     17.60  ok         22.22  ok  
22    43.8     33.76  ok         27.60  ok  
23    43.8     24.20  ok         20.06  ok  
24    43.8     14.72  ok         22.88  ok  
25    43.8     19.00  ok         29.50  ok  
26    43.8     47.16  fail       32.60  ok  
27    43.8     25.28  ok         22.58  ok  
28    43.8     12.00  ok         17.60  ok  
29    43.8     18.32  ok         24.12  ok  
30    43.8     37.40  ok         21.80  ok  
31    43.8     15.94  ok         32.06  ok  
32    43.8     38.88  ok         33.12  ok  
33    43.8     30.02  ok         30.02  ok  
34    43.8     37.36  ok         39.40  ok  
35    43.8     31.60  ok         35.80  ok  
36    43.8     34.64  ok         33.92  ok  
37    43.8     21.36  ok         39.12  ok  
38    43.8     37.56  ok         26.16  ok  
39    43.8     32.60  ok         33.38  ok  


Values count = 1000
 N  xi(0.05)    rand()%N          uniform
-----------------------------------------
 2     3.8      0.10  ok          0.06  ok  
 3     5.9      0.42  ok          3.80  ok  
 4     7.8      2.98  ok          2.30  ok  
 5     9.5      3.00  ok          0.73  ok  
 6    11.1      4.58  ok          6.00  ok  
 7    12.6      4.04  ok          6.42  ok  
 8    14.1      3.25  ok          3.33  ok  
 9    15.5      9.17  ok          9.66  ok  
10    16.9      8.10  ok          4.94  ok  
11    18.3      1.75  ok          8.00  ok  
12    19.7     11.50  ok          7.95  ok  
13    21.0     15.64  ok         11.35  ok  
14    22.4     15.76  ok         12.84  ok  
15    23.7     10.07  ok          3.95  ok  
16    25.0     23.71  ok         12.58  ok  
17    26.3     13.98  ok          9.22  ok  
18    27.6     13.72  ok         24.16  ok  
19    28.9     20.41  ok         12.17  ok  
20    43.8     23.32  ok         15.40  ok  
21    43.8     22.83  ok         12.96  ok  
22    43.8     26.30  ok         30.83  ok  
23    43.8     14.94  ok         21.66  ok  
24    43.8     21.49  ok         22.02  ok  
25    43.8     12.00  ok         17.95  ok  
26    43.8     37.76  ok         22.84  ok  
27    43.8     45.98  fail       36.75  ok  
28    43.8     19.20  ok         30.96  ok  
29    43.8     18.77  ok         18.19  ok  
30    43.8     26.30  ok         25.22  ok  
31    43.8     25.79  ok         18.97  ok  
32    43.8     20.93  ok         37.95  ok  
33    43.8     34.88  ok         24.98  ok  
34    43.8     25.92  ok         43.26  ok  
35    43.8     24.66  ok         33.41  ok  
36    43.8     46.30  fail       46.23  fail
37    43.8     49.84  fail       46.43  fail
38    43.8     31.93  ok         39.15  ok  
39    43.8     37.63  ok         32.49  ok  


Values count = 10000
 N  xi(0.05)    rand()%N          uniform
-----------------------------------------
 2     3.8      0.03  ok          0.67  ok  
 3     5.9      4.54  ok          1.53  ok  
 4     7.8      0.33  ok          3.62  ok  
 5     9.5      3.68  ok          3.08  ok  
 6    11.1      5.20  ok          9.17  ok  
 7    12.6      4.54  ok         14.57  fail
 8    14.1      7.48  ok          6.90  ok  
 9    15.5     12.24  ok          5.63  ok  
10    16.9     10.81  ok          6.26  ok  
11    18.3      5.43  ok          7.18  ok  
12    19.7      4.28  ok         17.29  ok  
13    21.0     13.96  ok          6.31  ok  
14    22.4     11.70  ok         21.52  ok  
15    23.7      5.90  ok         17.83  ok  
16    25.0     22.10  ok         15.40  ok  
17    26.3     22.99  ok         16.22  ok  
18    27.6      9.13  ok          9.22  ok  
19    28.9     17.86  ok         15.75  ok  
20    43.8     10.08  ok          9.99  ok  
21    43.8     16.45  ok         13.17  ok  
22    43.8     23.40  ok         20.26  ok  
23    43.8     19.86  ok         16.71  ok  
24    43.8     24.84  ok         16.89  ok  
25    43.8     24.13  ok         14.55  ok  
26    43.8     21.85  ok         26.04  ok  
27    43.8     27.14  ok         22.88  ok  
28    43.8     36.39  ok         31.69  ok  
29    43.8     36.54  ok         37.19  ok  
30    43.8     19.86  ok         28.33  ok  
31    43.8     30.47  ok         35.25  ok  
32    43.8     22.89  ok         35.74  ok  
33    43.8     34.92  ok         20.79  ok  
34    43.8     42.36  ok         24.44  ok  
35    43.8     27.76  ok         39.09  ok  
36    43.8     39.45  ok         34.04  ok  
37    43.8     36.28  ok         21.12  ok  
38    43.8     29.06  ok         52.88  fail
39    43.8     34.43  ok         47.16  fail


Values count = 100000
 N  xi(0.05)    rand()%N          uniform
-----------------------------------------
 2     3.8      0.00  ok          0.75  ok  
 3     5.9      0.84  ok          3.09  ok  
 4     7.8      2.85  ok          0.41  ok  
 5     9.5      1.95  ok          2.51  ok  
 6    11.1      7.67  ok          5.80  ok  
 7    12.6      9.46  ok          8.62  ok  
 8    14.1      4.28  ok          3.91  ok  
 9    15.5      4.48  ok          7.46  ok  
10    16.9      6.60  ok          2.03  ok  
11    18.3      8.37  ok          4.74  ok  
12    19.7      8.01  ok         19.25  ok  
13    21.0     11.33  ok         13.13  ok  
14    22.4     11.78  ok         14.74  ok  
15    23.7     21.48  ok         34.59  fail
16    25.0     19.58  ok         12.29  ok  
17    26.3     13.90  ok         26.58  fail
18    27.6     24.65  ok         19.73  ok  
19    28.9      7.98  ok         19.39  ok  
20    43.8      9.02  ok         16.49  ok  
21    43.8     21.46  ok         23.82  ok  
22    43.8     29.94  ok         19.84  ok  
23    43.8     14.00  ok         17.47  ok  
24    43.8     18.65  ok         34.96  ok  
25    43.8     20.30  ok         20.28  ok  
26    43.8     21.55  ok         27.49  ok  
27    43.8     28.89  ok         38.56  ok  
28    43.8     13.45  ok         34.38  ok  
29    43.8     45.95  fail       26.21  ok  
30    43.8     28.32  ok         14.88  ok  
31    43.8     36.08  ok         28.34  ok  
32    43.8     26.95  ok         30.87  ok  
33    43.8     24.01  ok         23.93  ok  
34    43.8     50.64  fail       30.89  ok  
35    43.8     31.89  ok         36.52  ok  
36    43.8     35.70  ok         32.02  ok  
37    43.8     33.80  ok         30.62  ok  
38    43.8     46.24  fail       48.77  fail
39    43.8     43.63  ok         41.92  ok