// ErlangB Calculator C // Author: Derek J Corbett // Web: http://www.cs.usyd.edu.au/~dcorbett #include #include double erlang(int n, double a){ double e; int i; e = 1.0; for(i=1; i<=n; i++) e = 1.0 + e * i / a; return (1.0 / e); } double find_erlang(int n, double p, double inc){ double a; double cp; for(a = 0.00; ; a = a + inc){ cp = erlang(n,a); if(cp > p){ a = a - inc; break; } } return a; } int main(int argc, char** argv){ float res; double inc; if(argc < 3){ printf("Usage erlang N (channels) P (probability) I (increment)\n"); exit(1); } if(argc == 3){ inc = 0.01; } else{ inc = (double)atof(argv[3]); } if((double)atof(argv[2]) >= 1 || (double)atof(argv[2]) <= 0){ printf("Usage erlang N (channels) P (probability) I (increment)\nP must be between 1 and 0"); exit(1); } res = find_erlang(atoi(argv[1]),(double)atof(argv[2]),inc); printf("%0.5f \n",res); }