Beispiel #1
0
gnm_float
pgumbel (gnm_float x, gnm_float mu, gnm_float beta, gboolean lower_tail, gboolean log_p)
{
	gnm_float z, lp;

	if (!(beta > 0) || gnm_isnan (mu) || gnm_isnan (beta) || gnm_isnan (x))
		return gnm_nan;

	z = (x - mu) / beta;
	lp = -gnm_exp (-z);
	if (lower_tail)
		return log_p ? lp : gnm_exp (lp);
	else
		return log_p ? swap_log_tail (lp) : 0 - gnm_expm1 (lp);
}
Beispiel #2
0
gnm_float
qcauchy (gnm_float p, gnm_float location, gnm_float scale,
         gboolean lower_tail, gboolean log_p)
{
    if (gnm_isnan(p) || gnm_isnan(location) || gnm_isnan(scale))
        return p + location + scale;

    R_Q_P01_check(p);
    if (scale < 0 || !gnm_finite(scale)) ML_ERR_return_NAN;

    if (log_p) {
        if (p > -1)
            /* The "0" here is important for the p=0 case:  */
            lower_tail = !lower_tail, p = 0 - gnm_expm1 (p);
        else
            p = gnm_exp (p);
    }
    if (lower_tail) scale = -scale;
    return location + scale / gnm_tan(M_PIgnum * p);
}