/* * 概要 * 呼損率を返す * 関数名 * double ErlnB(int n,double e) */ double ErlnB(int n,double e) { double d = 1.; int i; for (i=1;i<=n;++i) { d *= e; d = d / (i + d); } return d; } /* * 概要 * チャネル数を返す * 関数名 * int ErlnN(double e,double b) */ int ErlnN(double e,double b) { double d = 1.; int i=0; if (e < 1e-8) return 0; while (d > b) { d *= e; d = d / (++i + d); } return i; } /* * 概要 * 呼量を返す * 関数名 * double ErlnE(int n,double b) */ double ErlnE(int n,double b) { double d,e; int i; i = (int)((n<=30 ? 0.003*n*n+0.74*n-2 : 0.0002*n*n+0.943*n-5.5) *10); if (i < 0) i = 1; e = i/10.; d = ErlnB(n,e); if (d < b) { while (d < b) { e = ++i /10.; d = ErlnB(n,e); } --i; } else { while (d >= b) { e = --i /10.; d = ErlnB(n,e); } } return i/10.; }