1 #ifndef __STAN__PROB__DISTRIBUTIONS__UNIVARIATE__CONTINUOUS__TRUNC_NORMAL_HPP__
2 #define __STAN__PROB__DISTRIBUTIONS__UNIVARIATE__CONTINUOUS__TRUNC_NORMAL_HPP__
41 template <
bool propto,
42 typename T_y,
typename T_loc,
typename T_scale,
typename T_alpha,
typename T_beta,
44 typename boost::math::tools::promote_args<T_y,T_loc,T_scale,T_alpha,T_beta>::type
46 const T_alpha& alpha,
const T_beta& beta,
48 static const char*
function =
"stan::prob::trunc_normal_log(%1%)";
53 using boost::math::tools::promote_args;
58 typename promote_args<T_y,T_loc,T_scale,T_alpha,T_beta>::type lp(0.0);
70 if (y < alpha || y > beta) {
74 lp = normal_log<propto>(y,mu,sigma,Policy());
77 lp -=
log(beta - alpha);
80 lp -=
log(
Phi((beta - mu)/sigma) -
Phi((alpha - mu)/sigma));
82 lp -=
log(1.0 -
Phi((alpha - mu)/sigma));
84 lp -=
log(
Phi((beta - mu)/sigma));
92 template <
bool propto,
93 typename T_y,
typename T_loc,
typename T_scale,
typename T_alpha,
typename T_beta>
95 typename boost::math::tools::promote_args<T_y,T_loc,T_scale,T_alpha,T_beta>::type
96 trunc_normal_log(
const T_y& y,
const T_loc& mu,
const T_scale& sigma,
const T_alpha& alpha,
const T_beta& beta) {
100 template <
typename T_y,
typename T_loc,
typename T_scale,
typename T_alpha,
typename T_beta,
103 typename boost::math::tools::promote_args<T_y,T_loc,T_scale,T_alpha,T_beta>::type
104 trunc_normal_log(
const T_y& y,
const T_loc& mu,
const T_scale& sigma,
const T_alpha& alpha,
const T_beta& beta,
106 return trunc_normal_log<false>(y,mu,sigma,alpha,beta,Policy());
109 template <
typename T_y,
typename T_loc,
typename T_scale,
typename T_alpha,
typename T_beta>
111 typename boost::math::tools::promote_args<T_y,T_loc,T_scale,T_alpha,T_beta>::type
112 trunc_normal_log(
const T_y& y,
const T_loc& mu,
const T_scale& sigma,
const T_alpha& alpha,
const T_beta& beta) {