1 #ifndef STAN_MATH_PRIM_SCAL_FUN_GRAD_F32_HPP 2 #define STAN_MATH_PRIM_SCAL_FUN_GRAD_F32_HPP 10 void grad_F32(T* g, T a, T b, T c, T d, T
e, T z, T precision = 1e-6) {
17 for (T *p = g; p != g + 6; ++p) *p = 0;
18 for (T *p = gOld; p != gOld + 6; ++p) *p = 0;
29 while (
fabs(tNew) > precision || k == 0) {
30 T C = (a + k) / (d + k);
31 C *= (b + k) / (e + k);
32 C *= (c + k) / (1 + k);
38 logT += (C > 0 ? 1 : -1) *
log(
fabs(C)) + logZ;
42 gOld[0] = tNew * (gOld[0] / tOld + 1.0 / (a + k));
43 gOld[1] = tNew * (gOld[1] / tOld + 1.0 / (b + k));
44 gOld[2] = tNew * (gOld[2] / tOld + 1.0 / (c + k));
46 gOld[3] = tNew * (gOld[3] / tOld - 1.0 / (d + k));
47 gOld[4] = tNew * (gOld[4] / tOld - 1.0 / (e + k));
49 gOld[5] = tNew * (gOld[5] / tOld + 1.0 / z);
51 for (
int i = 0; i < 6; ++i) g[i] += gOld[i];
fvar< T > fabs(const fvar< T > &x)
fvar< T > log(const fvar< T > &x)
fvar< T > exp(const fvar< T > &x)
double e()
Return the base of the natural logarithm.
void grad_F32(T *g, T a, T b, T c, T d, T e, T z, T precision=1e-6)