1 #ifndef STAN_MATH_PRIM_SCAL_FUN_GRAD_F32_HPP
2 #define STAN_MATH_PRIM_SCAL_FUN_GRAD_F32_HPP
11 void grad_F32(T* g, T a, T b, T c, T d, T
e, T z, T precision = 1e-6) {
18 for (T *p = g; p != g + 6; ++p) *p = 0;
19 for (T *p = gOld; p != gOld + 6; ++p) *p = 0;
30 while (
fabs(tNew) > precision || k == 0) {
31 T C = (a + k) / (d + k);
32 C *= (b + k) / (e + k);
33 C *= (c + k) / (1 + k);
39 logT += (C > 0 ? 1 : -1) *
log(
fabs(C)) + logZ;
43 gOld[0] = tNew * (gOld[0] / tOld + 1.0 / (a + k));
44 gOld[1] = tNew * (gOld[1] / tOld + 1.0 / (b + k));
45 gOld[2] = tNew * (gOld[2] / tOld + 1.0 / (c + k));
47 gOld[3] = tNew * (gOld[3] / tOld - 1.0 / (d + k));
48 gOld[4] = tNew * (gOld[4] / tOld - 1.0 / (e + k));
50 gOld[5] = tNew * (gOld[5] / tOld + 1.0 / z);
52 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)