x + \frac{y \cdot \left(\left(\left(\left(z \cdot 3.13060547623 + 11.1667541262\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b\right)}{\left(\left(\left(z + 15.234687407\right) \cdot z + 31.4690115749\right) \cdot z + 11.9400905721\right) \cdot z + 0.607771387771}\begin{array}{l}
\mathbf{if}\;z \le -3.9856954798303585 \cdot 10^{+39}:\\
\;\;\;\;\left(3.13060547623 \cdot y + \left(\frac{y}{z} \cdot \frac{t}{z} - 36.527041698806414 \cdot \frac{y}{z}\right)\right) + x\\
\mathbf{elif}\;z \le 4.8590408174333496 \cdot 10^{+55}:\\
\;\;\;\;x + \frac{y}{\frac{0.607771387771 + z \cdot \left(11.9400905721 + z \cdot \left(z \cdot \left(15.234687407 + z\right) + 31.4690115749\right)\right)}{b + \left(a + z \cdot \left(t + \left(3.13060547623 \cdot z + 11.1667541262\right) \cdot z\right)\right) \cdot z}}\\
\mathbf{else}:\\
\;\;\;\;\left(3.13060547623 \cdot y + \left(\frac{y}{z} \cdot \frac{t}{z} - 36.527041698806414 \cdot \frac{y}{z}\right)\right) + x\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r22868156 = x;
double r22868157 = y;
double r22868158 = z;
double r22868159 = 3.13060547623;
double r22868160 = r22868158 * r22868159;
double r22868161 = 11.1667541262;
double r22868162 = r22868160 + r22868161;
double r22868163 = r22868162 * r22868158;
double r22868164 = t;
double r22868165 = r22868163 + r22868164;
double r22868166 = r22868165 * r22868158;
double r22868167 = a;
double r22868168 = r22868166 + r22868167;
double r22868169 = r22868168 * r22868158;
double r22868170 = b;
double r22868171 = r22868169 + r22868170;
double r22868172 = r22868157 * r22868171;
double r22868173 = 15.234687407;
double r22868174 = r22868158 + r22868173;
double r22868175 = r22868174 * r22868158;
double r22868176 = 31.4690115749;
double r22868177 = r22868175 + r22868176;
double r22868178 = r22868177 * r22868158;
double r22868179 = 11.9400905721;
double r22868180 = r22868178 + r22868179;
double r22868181 = r22868180 * r22868158;
double r22868182 = 0.607771387771;
double r22868183 = r22868181 + r22868182;
double r22868184 = r22868172 / r22868183;
double r22868185 = r22868156 + r22868184;
return r22868185;
}
double f(double x, double y, double z, double t, double a, double b) {
double r22868186 = z;
double r22868187 = -3.9856954798303585e+39;
bool r22868188 = r22868186 <= r22868187;
double r22868189 = 3.13060547623;
double r22868190 = y;
double r22868191 = r22868189 * r22868190;
double r22868192 = r22868190 / r22868186;
double r22868193 = t;
double r22868194 = r22868193 / r22868186;
double r22868195 = r22868192 * r22868194;
double r22868196 = 36.527041698806414;
double r22868197 = r22868196 * r22868192;
double r22868198 = r22868195 - r22868197;
double r22868199 = r22868191 + r22868198;
double r22868200 = x;
double r22868201 = r22868199 + r22868200;
double r22868202 = 4.8590408174333496e+55;
bool r22868203 = r22868186 <= r22868202;
double r22868204 = 0.607771387771;
double r22868205 = 11.9400905721;
double r22868206 = 15.234687407;
double r22868207 = r22868206 + r22868186;
double r22868208 = r22868186 * r22868207;
double r22868209 = 31.4690115749;
double r22868210 = r22868208 + r22868209;
double r22868211 = r22868186 * r22868210;
double r22868212 = r22868205 + r22868211;
double r22868213 = r22868186 * r22868212;
double r22868214 = r22868204 + r22868213;
double r22868215 = b;
double r22868216 = a;
double r22868217 = r22868189 * r22868186;
double r22868218 = 11.1667541262;
double r22868219 = r22868217 + r22868218;
double r22868220 = r22868219 * r22868186;
double r22868221 = r22868193 + r22868220;
double r22868222 = r22868186 * r22868221;
double r22868223 = r22868216 + r22868222;
double r22868224 = r22868223 * r22868186;
double r22868225 = r22868215 + r22868224;
double r22868226 = r22868214 / r22868225;
double r22868227 = r22868190 / r22868226;
double r22868228 = r22868200 + r22868227;
double r22868229 = r22868203 ? r22868228 : r22868201;
double r22868230 = r22868188 ? r22868201 : r22868229;
return r22868230;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a




Bits error versus b
Results
| Original | 28.8 |
|---|---|
| Target | 1.0 |
| Herbie | 1.1 |
if z < -3.9856954798303585e+39 or 4.8590408174333496e+55 < z Initial program 58.9
rmApplied associate-/l*56.8
rmApplied div-inv56.8
Simplified56.8
Taylor expanded around inf 8.3
Simplified1.3
if -3.9856954798303585e+39 < z < 4.8590408174333496e+55Initial program 2.2
rmApplied associate-/l*0.9
Final simplification1.1
herbie shell --seed 2019162
(FPCore (x y z t a b)
:name "Numeric.SpecFunctions:logGamma from math-functions-0.1.5.2, D"
:herbie-target
(if (< z -6.499344996252632e+53) (+ x (* (+ (- 3.13060547623 (/ 36.527041698806414 z)) (/ t (* z z))) (/ y 1))) (if (< z 7.066965436914287e+59) (+ x (/ y (/ (+ (* (+ (* (+ (* (+ z 15.234687407) z) 31.4690115749) z) 11.9400905721) z) 0.607771387771) (+ (* (+ (* (+ (* (+ (* z 3.13060547623) 11.1667541262) z) t) z) a) z) b)))) (+ x (* (+ (- 3.13060547623 (/ 36.527041698806414 z)) (/ t (* z z))) (/ y 1)))))
(+ x (/ (* y (+ (* (+ (* (+ (* (+ (* z 3.13060547623) 11.1667541262) z) t) z) a) z) b)) (+ (* (+ (* (+ (* (+ z 15.234687407) z) 31.4690115749) z) 11.9400905721) z) 0.607771387771))))