x + \frac{y \cdot \left(\left(\left(\left(z \cdot 3.130605476229999961645944495103321969509 + 11.16675412620000074070958362426608800888\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b\right)}{\left(\left(\left(z + 15.2346874069999991263557603815570473671\right) \cdot z + 31.46901157490000144889563671313226222992\right) \cdot z + 11.94009057210000079862766142468899488449\right) \cdot z + 0.6077713877710000378584709324059076607227}\begin{array}{l}
\mathbf{if}\;z \le -1.535870723425017265441515703700627878683 \cdot 10^{50} \lor \neg \left(z \le 1.053511161193009402933625668226348721359 \cdot 10^{55}\right):\\
\;\;\;\;x + \left(\left(3.130605476229999961645944495103321969509 \cdot y + \frac{t}{\frac{{z}^{2}}{y}}\right) - 36.52704169880641416057187598198652267456 \cdot \frac{y}{z}\right)\\
\mathbf{else}:\\
\;\;\;\;x + \frac{y}{\frac{\left(\left(\left(z + 15.2346874069999991263557603815570473671\right) \cdot z + 31.46901157490000144889563671313226222992\right) \cdot z + 11.94009057210000079862766142468899488449\right) \cdot z + 0.6077713877710000378584709324059076607227}{\left(\left(\left(z \cdot 3.130605476229999961645944495103321969509 + 11.16675412620000074070958362426608800888\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b}}\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r206239 = x;
double r206240 = y;
double r206241 = z;
double r206242 = 3.13060547623;
double r206243 = r206241 * r206242;
double r206244 = 11.1667541262;
double r206245 = r206243 + r206244;
double r206246 = r206245 * r206241;
double r206247 = t;
double r206248 = r206246 + r206247;
double r206249 = r206248 * r206241;
double r206250 = a;
double r206251 = r206249 + r206250;
double r206252 = r206251 * r206241;
double r206253 = b;
double r206254 = r206252 + r206253;
double r206255 = r206240 * r206254;
double r206256 = 15.234687407;
double r206257 = r206241 + r206256;
double r206258 = r206257 * r206241;
double r206259 = 31.4690115749;
double r206260 = r206258 + r206259;
double r206261 = r206260 * r206241;
double r206262 = 11.9400905721;
double r206263 = r206261 + r206262;
double r206264 = r206263 * r206241;
double r206265 = 0.607771387771;
double r206266 = r206264 + r206265;
double r206267 = r206255 / r206266;
double r206268 = r206239 + r206267;
return r206268;
}
double f(double x, double y, double z, double t, double a, double b) {
double r206269 = z;
double r206270 = -1.5358707234250173e+50;
bool r206271 = r206269 <= r206270;
double r206272 = 1.0535111611930094e+55;
bool r206273 = r206269 <= r206272;
double r206274 = !r206273;
bool r206275 = r206271 || r206274;
double r206276 = x;
double r206277 = 3.13060547623;
double r206278 = y;
double r206279 = r206277 * r206278;
double r206280 = t;
double r206281 = 2.0;
double r206282 = pow(r206269, r206281);
double r206283 = r206282 / r206278;
double r206284 = r206280 / r206283;
double r206285 = r206279 + r206284;
double r206286 = 36.527041698806414;
double r206287 = r206278 / r206269;
double r206288 = r206286 * r206287;
double r206289 = r206285 - r206288;
double r206290 = r206276 + r206289;
double r206291 = 15.234687407;
double r206292 = r206269 + r206291;
double r206293 = r206292 * r206269;
double r206294 = 31.4690115749;
double r206295 = r206293 + r206294;
double r206296 = r206295 * r206269;
double r206297 = 11.9400905721;
double r206298 = r206296 + r206297;
double r206299 = r206298 * r206269;
double r206300 = 0.607771387771;
double r206301 = r206299 + r206300;
double r206302 = r206269 * r206277;
double r206303 = 11.1667541262;
double r206304 = r206302 + r206303;
double r206305 = r206304 * r206269;
double r206306 = r206305 + r206280;
double r206307 = r206306 * r206269;
double r206308 = a;
double r206309 = r206307 + r206308;
double r206310 = r206309 * r206269;
double r206311 = b;
double r206312 = r206310 + r206311;
double r206313 = r206301 / r206312;
double r206314 = r206278 / r206313;
double r206315 = r206276 + r206314;
double r206316 = r206275 ? r206290 : r206315;
return r206316;
}




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 | 29.4 |
|---|---|
| Target | 1.0 |
| Herbie | 1.0 |
if z < -1.5358707234250173e+50 or 1.0535111611930094e+55 < z Initial program 61.7
Taylor expanded around inf 8.0
rmApplied associate-/l*0.9
if -1.5358707234250173e+50 < z < 1.0535111611930094e+55Initial program 2.6
rmApplied associate-/l*1.1
Final simplification1.0
herbie shell --seed 2019304
(FPCore (x y z t a b)
:name "Numeric.SpecFunctions:logGamma from math-functions-0.1.5.2, D"
:precision binary64
:herbie-target
(if (< z -6.4993449962526318e53) (+ x (* (+ (- 3.13060547622999996 (/ 36.527041698806414 z)) (/ t (* z z))) (/ y 1))) (if (< z 7.0669654369142868e59) (+ x (/ y (/ (+ (* (+ (* (+ (* (+ z 15.234687406999999) z) 31.469011574900001) z) 11.940090572100001) z) 0.60777138777100004) (+ (* (+ (* (+ (* (+ (* z 3.13060547622999996) 11.166754126200001) z) t) z) a) z) b)))) (+ x (* (+ (- 3.13060547622999996 (/ 36.527041698806414 z)) (/ t (* z z))) (/ y 1)))))
(+ x (/ (* y (+ (* (+ (* (+ (* (+ (* z 3.13060547622999996) 11.166754126200001) z) t) z) a) z) b)) (+ (* (+ (* (+ (* (+ z 15.234687406999999) z) 31.469011574900001) z) 11.940090572100001) z) 0.60777138777100004))))