Go to the documentation of this file.
24 #define give_log log_p
27 #define R_D__0 (log_p ? ML_NEGINF : 0.)
28 #define R_D__1 (log_p ? 0. : 1.)
29 #define R_DT_0 (lower_tail ? R_D__0 : R_D__1)
30 #define R_DT_1 (lower_tail ? R_D__1 : R_D__0)
33 #define R_D_Lval(p) (lower_tail ? (p) : (0.5 - (p) + 0.5))
34 #define R_D_Cval(p) (lower_tail ? (0.5 - (p) + 0.5) : (p))
36 #define R_D_val(x) (log_p ? ::log(x) : (x))
37 #define R_D_qIv(p) (log_p ? ::exp(p) : (p))
38 #define R_D_exp(x) (log_p ? (x) : ::exp(x))
39 #define R_D_log(p) (log_p ? (p) : ::log(p))
40 #define R_D_Clog(p) (log_p ? ::log1p(-(p)) : (0.5 - (p) + 0.5))
43 #define R_Log1_Exp(x) ((x) > -M_LN2 ? ::log(-::expm1(x)) : ::log1p(-::exp(x)))
46 #define R_D_LExp(x) (log_p ? R_Log1_Exp(x) : ::log1p(-x))
48 #define R_DT_val(x) (lower_tail ? R_D_val(x) : R_D_Clog(x))
49 #define R_DT_Cval(x) (lower_tail ? R_D_Clog(x) : R_D_val(x))
52 #define R_DT_qIv(p) (log_p ? (lower_tail ? ::exp(p) : - ::expm1(p)) \
56 #define R_DT_CIv(p) (log_p ? (lower_tail ? -expm1(p) : ::exp(p)) \
59 #define R_DT_exp(x) R_D_exp(R_D_Lval(x))
60 #define R_DT_Cexp(x) R_D_exp(R_D_Cval(x))
62 #define R_DT_log(p) (lower_tail? R_D_log(p) : R_D_LExp(p))
63 #define R_DT_Clog(p) (lower_tail? R_D_LExp(p): R_D_log(p))
64 #define R_DT_Log(p) (lower_tail? (p) : R_Log1_Exp(p))
68 #define R_Q_P01_check(p) \
69 if ((log_p && p > 0) || \
70 (!log_p && (p < 0 || p > 1)) ) \
84 #define R_Q_P01_boundaries(p, _LEFT_, _RIGHT_) \
89 return lower_tail ? _RIGHT_ : _LEFT_; \
91 return lower_tail ? _LEFT_ : _RIGHT_; \
97 return lower_tail ? _LEFT_ : _RIGHT_; \
99 return lower_tail ? _RIGHT_ : _LEFT_; \
102 #define R_P_bounds_01(x, x_min, x_max) \
103 if(x <= x_min) return R_DT_0; \
104 if(x >= x_max) return R_DT_1
107 #define R_P_bounds_Inf_01(x) \
109 if (x > 0) return R_DT_1; \
116 #define R_D_fexp(f,x) (give_log ? -0.5*log(f)+(x) : exp(x)/sqrt(f))
117 #define R_D_forceint(x) floor((x) + 0.5)
118 #define R_D_nonint(x) (fabs((x) - floor((x)+0.5)) > 1e-7)
120 #define R_D_negInonint(x) (x < 0. || R_D_nonint(x))
122 #define R_D_nonint_check(x) \
123 if(R_D_nonint(x)) { \
124 MATHLIB_WARNING("non-integer x = %f", x); \