10586520acb2f368c874943353a222be7f00c3068Fariborz Jahanian#include "AvalancheTest.h"
20586520acb2f368c874943353a222be7f00c3068Fariborz Jahanian
30586520acb2f368c874943353a222be7f00c3068Fariborz Jahanian//-----------------------------------------------------------------------------
40586520acb2f368c874943353a222be7f00c3068Fariborz Jahanian
50586520acb2f368c874943353a222be7f00c3068Fariborz Jahanianvoid PrintAvalancheDiagram ( int x, int y, int reps, double scale, int * bins )
60586520acb2f368c874943353a222be7f00c3068Fariborz Jahanian{
70586520acb2f368c874943353a222be7f00c3068Fariborz Jahanian  const char * symbols = ".123456789X";
80586520acb2f368c874943353a222be7f00c3068Fariborz Jahanian
90586520acb2f368c874943353a222be7f00c3068Fariborz Jahanian  for(int i = 0; i < y; i++)
100586520acb2f368c874943353a222be7f00c3068Fariborz Jahanian  {
110586520acb2f368c874943353a222be7f00c3068Fariborz Jahanian    printf("[");
120586520acb2f368c874943353a222be7f00c3068Fariborz Jahanian    for(int j = 0; j < x; j++)
130586520acb2f368c874943353a222be7f00c3068Fariborz Jahanian    {
140586520acb2f368c874943353a222be7f00c3068Fariborz Jahanian      int k = (y - i) -1;
150586520acb2f368c874943353a222be7f00c3068Fariborz Jahanian
16      int bin = bins[k + (j*y)];
17
18      double b = double(bin) / double(reps);
19      b = fabs(b*2 - 1);
20
21      b *= scale;
22
23      int s = (int)floor(b*10);
24
25      if(s > 10) s = 10;
26      if(s < 0) s = 0;
27
28      printf("%c",symbols[s]);
29    }
30
31    printf("]\n");
32  }
33}
34
35//----------------------------------------------------------------------------
36
37double maxBias ( std::vector<int> & counts, int reps )
38{
39  double worst = 0;
40
41  for(int i = 0; i < (int)counts.size(); i++)
42  {
43    double c = double(counts[i]) / double(reps);
44
45    double d = fabs(c * 2 - 1);
46
47    if(d > worst)
48    {
49      worst = d;
50    }
51  }
52
53  return worst;
54}
55
56//-----------------------------------------------------------------------------
57