00001 #include "StdAfx.h"
00002
00003
00004 #define WANT_MATH
00005
00006 #include "include.h"
00007 #include "extreal.h"
00008 #include "newran.h"
00009
00010 #ifdef use_namespace
00011 using namespace NEWRAN;
00012 #endif
00013
00014 #define al_trace printf
00015
00016 void Histogram(Random* rx, int n)
00017 {
00018 int i,j; int count[20];
00019 Real* a = new Real[n];
00020 for (i = 0; i < n; i++) a[i] = rx->Next();
00021 Real amax = a[0]; Real amin = a[0]; Real mean = a[0]; Real sd = 0;
00022 for (i = 1; i < n; i++)
00023 {
00024 if (amin > a[i]) amin = a[i]; else if (amax < a[i]) amax = a[i];
00025 mean += a[i];
00026 }
00027 mean /= n;
00028 for (i = 0; i < 20; i++) count[i]=0;
00029 for (i = 0; i < n; i++)
00030 {
00031 Real rat= (amax != amin) ? (a[i] - amin)/(amax - amin) : 1.0;
00032 j = (int)( 19.999 * rat ); count[j]++;
00033 Real diff = a[i] - mean; sd += diff*diff;
00034 }
00035 sd = sqrt(sd/(n-1));
00036 j = 0;
00037 for (i = 0; i < 20; i++) { if (j < count[i]) j = count[i]; }
00038 if (j > 70) { for (i = 0; i < 20; i++) count[i] = (int)((70L*count[i])/j); }
00039
00040 al_trace( "\n" );
00041 for (i = 0; i < 20; i++)
00042 {
00043 al_trace( "\n|" );
00044 for (j = 1; j < count[i]; j = j+1)
00045 al_trace( "*" );
00046 }
00047
00048
00049
00050 delete a;
00051 }
00052
00053 void Hist(Random* rx, int n , const int cnt )
00054 {
00055 int i,j; int *count = new int[cnt];
00056 Real* a = new Real[n];
00057 for (i = 0; i < n; i++) a[i] = rx->Next();
00058 Real amax = a[0]; Real amin = a[0]; Real mean = a[0]; Real sd = 0;
00059 for (i = 1; i < n; i++)
00060 {
00061 if (amin > a[i]) amin = a[i]; else if (amax < a[i]) amax = a[i];
00062 mean += a[i];
00063 }
00064 mean /= n;
00065 for (i = 0; i < cnt ; i++) count[i]=0;
00066 for (i = 0; i < n; i++)
00067 {
00068 Real rat= (amax != amin) ? (a[i] - amin)/(amax - amin) : 1.0;
00069 j = (int)( (cnt - 0.001) * rat ); count[j]++;
00070 Real diff = a[i] - mean; sd += diff*diff;
00071 }
00072 sd = sqrt(sd/(n-1));
00073 j = 0;
00074 for (i = 0; i < cnt; i++) { if (j < count[i]) j = count[i]; }
00075 if (j > 70) { for (i = 0; i < cnt; i++) if( count[i] ) count[i] = (int)((70L*count[i])/j); }
00076
00077 al_trace( "\n" );
00078 for (i = 0; i < cnt; i++)
00079 {
00080 al_trace( "\n%02d|" , i );
00081 for (j = 1; j < count[i] ; j = j+1)
00082 al_trace( "*" );
00083 }
00084
00085
00086
00087 delete count;
00088 delete a;
00089 }
00090 #ifdef PLATFORM_WIN32
00091 void alHistogram( Random* rx , int n , Real *a , const int ncount )
00092 {
00093 int i,j; int *count = new int[ncount];
00094
00095 Real amax = a[0]; Real amin = a[0]; Real mean = a[0]; Real sd = 0;
00096 for (i = 1; i < n; i++)
00097 {
00098 if (amin > a[i]) amin = a[i]; else if (amax < a[i]) amax = a[i];
00099 mean += a[i];
00100 }
00101 mean /= n;
00102 for (i = 0; i < ncount; i++) count[i]=0;
00103 for (i = 0; i < n; i++)
00104 {
00105 Real rat= (amax != amin) ? (a[i] - amin)/(amax - amin) : 1.0;
00106 j = (int)( (double( ncount ) - 0.001) * rat ); count[j]++;
00107 Real diff = a[i] - mean; sd += diff*diff;
00108 }
00109 sd = sqrt(sd/(n-1));
00110
00111
00112
00113
00114
00115 al_trace( "\n" );
00116 for (i = 0; i < ncount; i++)
00117 {
00118 al_trace( "\n%04d|" , i );
00119 for (j = 1; j < count[i]; j = j+1)
00120 al_trace( "*" );
00121 }
00122 al_trace( "\n%s\np. mean = %9f, p. var = %9f\ns. mean = %9f, s. var = %9f\n" ,
00123 rx->Name() , rx->Mean() , rx->Variance() , mean , sd * sd );
00124
00125 delete [] count;
00126 }
00127 #endif