/* Simple program to computer Erlang B formula */ /* Usage: cc -o formula formula.c -lm */ /* ./formula lambda duration capacity */ /* */ /* Original version by Jean Cao, May 2003 */ /* Modified by Carey Williamson, December 2003 */ #include #include #include double factorial(int f) { if( f == 1 ) return( f * 1.0 ); else return( (double) (factorial(f-1) * f) ); } double sigma(float Y, int M) { if ( M == 0 ) return 1; else return( sigma(Y, M-1) + pow(Y, M)/factorial(M) ); } int main(int argc, char *argv[]) { float lambda, h, Y, R, V; int M; float lost; if (argc != 4) { fprintf(stderr, "Usage: formula ArrivalRate HoldingTime NumChannels\n"); exit(1); } /* Determine arrival rate, mean holding time, and num channels */ lambda = atof(argv[1]); h = atof(argv[2]); M = atoi(argv[3]); /* Compute load in Erlangs */ Y = lambda * h; /* Compute ErlangB loss probability */ lost = (pow(Y, M)/factorial(M))/sigma(Y, M); printf("ErlangB(%f, %i) = %f\n", Y, M, lost); return(0); }