private static double calcUpper( final double y )
	{
		double result;
		double ySq;
		double xNum;
		double xDen;
		if( y <= 4.0 )
		{
			xNum = ERF_C[8] * y;
			xDen = y;
			for( int i = 0; i < 7; i++ )
			{
				xNum = (xNum + ERF_C[i]) * y;
				xDen = (xDen + ERF_D[i]) * y;
			}
			result = (xNum + ERF_C[7]) / (xDen + ERF_D[7]);
		}
		else
		{
			result = 0.0;
			if( y >= X_HUGE )
			{
				result = SQRPI / y;
			}
			else
			{
				ySq = 1.0 / (y * y);
				xNum = ERF_P[5] * ySq;
				xDen = ySq;
				for( int i = 0; i < 4; i++ )
				{
					xNum = (xNum + ERF_P[i]) * ySq;
					xDen = (xDen + ERF_Q[i]) * ySq;
				}
				result = ySq * (xNum + ERF_P[4]) / (xDen + ERF_Q[4]);
				result = (SQRPI - result) / y;
			}
		}
		ySq = Math.round( y * 16.0 ) / 16.0;
		double del = (y - ySq) * (y + ySq);
		result = Math.exp( -ySq * ySq ) * Math.exp( -del ) * result;
		return result;
	}