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