double cal_xbar_RL(int n, double u, double sigma, double UCL, double LCL)
{
double RL, sum, X, xbar;
int i;
double get_x(double, double);
RL=0;
do
{
sum =0;
for(i=1;i<= n; i++)
{
X= get_x(u,sigma);
sum = sum + X;
}
xbar = sum/n;
RL = RL + 1;
}while (xbar> LCL && xbar< UCL);
return RL;
}
/*----------------------- get_x function--------------------------------------*/
/* get a sample value x */
double get_x(double u, double sigma)
/* u and sigma are the mean and standard deviation of x */
{
double uniRandom;
double normalRandom;
int random;
double normal_z(double);
do
{ random = rand();
} while (random == 0 || random == RAND_MAX);
/************************************************************
normal_z() is used to find the random variable z from the
cumulative probability F. z follows a standard normal
distribution
************************************************************/
double normal_z(double F)
{ double beta, ubeta, y, yi, z;
int i;
static double b[] =
{1.570796288, 3.706987906e-2,
-8.364353589e-4, -2.250947176e-4,
6.841218299e-6, 5.824238515e-6,
-1.04527497e-6, 8.360937017e-8,
-3.231081277e-9, 3.657763036e-11,
6.936233982e-13};
if (F < 0.5 || F > 0.5)
{ beta = (F < 0.5) ? F : (1. - F);
y = -log(4. * beta * (1. - beta));
ubeta = 0.;
for (i = 0; i <= 10; i++)
{ if (i == 0)
yi = 1.;
else
yi *= y;