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 -8.012125234246043972472451502679502100871 \cdot 10^{48}:\\
\;\;\;\;\mathsf{fma}\left(y, 3.130605476229999961645944495103321969509 + \frac{\frac{1}{z}}{z} \cdot t, x\right)\\
\mathbf{elif}\;z \le 6604017825197738179408704188920627200:\\
\;\;\;\;\mathsf{fma}\left(y, \frac{\mathsf{fma}\left(\mathsf{fma}\left(z, \mathsf{fma}\left(\mathsf{fma}\left(3.130605476229999961645944495103321969509, z, 11.16675412620000074070958362426608800888\right), z, t\right), a\right), z, b\right)}{\mathsf{fma}\left(z, \mathsf{fma}\left(z, \mathsf{fma}\left(z, 15.2346874069999991263557603815570473671 + z, 31.46901157490000144889563671313226222992\right), 11.94009057210000079862766142468899488449\right), 0.6077713877710000378584709324059076607227\right)}, x\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(y, 3.130605476229999961645944495103321969509 + \frac{\frac{1}{z}}{z} \cdot t, x\right)\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r14195307 = x;
double r14195308 = y;
double r14195309 = z;
double r14195310 = 3.13060547623;
double r14195311 = r14195309 * r14195310;
double r14195312 = 11.1667541262;
double r14195313 = r14195311 + r14195312;
double r14195314 = r14195313 * r14195309;
double r14195315 = t;
double r14195316 = r14195314 + r14195315;
double r14195317 = r14195316 * r14195309;
double r14195318 = a;
double r14195319 = r14195317 + r14195318;
double r14195320 = r14195319 * r14195309;
double r14195321 = b;
double r14195322 = r14195320 + r14195321;
double r14195323 = r14195308 * r14195322;
double r14195324 = 15.234687407;
double r14195325 = r14195309 + r14195324;
double r14195326 = r14195325 * r14195309;
double r14195327 = 31.4690115749;
double r14195328 = r14195326 + r14195327;
double r14195329 = r14195328 * r14195309;
double r14195330 = 11.9400905721;
double r14195331 = r14195329 + r14195330;
double r14195332 = r14195331 * r14195309;
double r14195333 = 0.607771387771;
double r14195334 = r14195332 + r14195333;
double r14195335 = r14195323 / r14195334;
double r14195336 = r14195307 + r14195335;
return r14195336;
}
double f(double x, double y, double z, double t, double a, double b) {
double r14195337 = z;
double r14195338 = -8.012125234246044e+48;
bool r14195339 = r14195337 <= r14195338;
double r14195340 = y;
double r14195341 = 3.13060547623;
double r14195342 = 1.0;
double r14195343 = r14195342 / r14195337;
double r14195344 = r14195343 / r14195337;
double r14195345 = t;
double r14195346 = r14195344 * r14195345;
double r14195347 = r14195341 + r14195346;
double r14195348 = x;
double r14195349 = fma(r14195340, r14195347, r14195348);
double r14195350 = 6.604017825197738e+36;
bool r14195351 = r14195337 <= r14195350;
double r14195352 = 11.1667541262;
double r14195353 = fma(r14195341, r14195337, r14195352);
double r14195354 = fma(r14195353, r14195337, r14195345);
double r14195355 = a;
double r14195356 = fma(r14195337, r14195354, r14195355);
double r14195357 = b;
double r14195358 = fma(r14195356, r14195337, r14195357);
double r14195359 = 15.234687407;
double r14195360 = r14195359 + r14195337;
double r14195361 = 31.4690115749;
double r14195362 = fma(r14195337, r14195360, r14195361);
double r14195363 = 11.9400905721;
double r14195364 = fma(r14195337, r14195362, r14195363);
double r14195365 = 0.607771387771;
double r14195366 = fma(r14195337, r14195364, r14195365);
double r14195367 = r14195358 / r14195366;
double r14195368 = fma(r14195340, r14195367, r14195348);
double r14195369 = r14195351 ? r14195368 : r14195349;
double r14195370 = r14195339 ? r14195349 : r14195369;
return r14195370;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a




Bits error versus b
| Original | 29.4 |
|---|---|
| Target | 1.1 |
| Herbie | 1.1 |
if z < -8.012125234246044e+48 or 6.604017825197738e+36 < z Initial program 60.4
Simplified58.2
Taylor expanded around inf 8.5
Simplified1.3
rmApplied *-un-lft-identity1.3
Applied div-inv1.3
Applied times-frac1.3
Simplified1.3
if -8.012125234246044e+48 < z < 6.604017825197738e+36Initial program 1.8
Simplified0.9
Final simplification1.1
herbie shell --seed 2019171 +o rules:numerics
(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.0))) (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.0)))))
(+ 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))))