x + \frac{y \cdot \left(\left(\left(\left(z \cdot 3.13060547622999996 + 11.166754126200001\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b\right)}{\left(\left(\left(z + 15.234687406999999\right) \cdot z + 31.469011574900001\right) \cdot z + 11.940090572100001\right) \cdot z + 0.60777138777100004}\begin{array}{l}
\mathbf{if}\;z \le -7.33305524808745187 \cdot 10^{34} \lor \neg \left(z \le 50333907682696732700\right):\\
\;\;\;\;\mathsf{fma}\left(y, 3.13060547622999996 + \frac{\sqrt[3]{t}}{\frac{\left|z\right|}{\sqrt[3]{t}}} \cdot \frac{\sqrt[3]{t}}{\left|z\right|}, x\right)\\
\mathbf{else}:\\
\;\;\;\;x + \frac{y \cdot \left(\left(\left(\left(z \cdot 3.13060547622999996 + 11.166754126200001\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b\right)}{\left(\left(\left(z + 15.234687406999999\right) \cdot z + 31.469011574900001\right) \cdot z + 11.940090572100001\right) \cdot z + 0.60777138777100004}\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r243255 = x;
double r243256 = y;
double r243257 = z;
double r243258 = 3.13060547623;
double r243259 = r243257 * r243258;
double r243260 = 11.1667541262;
double r243261 = r243259 + r243260;
double r243262 = r243261 * r243257;
double r243263 = t;
double r243264 = r243262 + r243263;
double r243265 = r243264 * r243257;
double r243266 = a;
double r243267 = r243265 + r243266;
double r243268 = r243267 * r243257;
double r243269 = b;
double r243270 = r243268 + r243269;
double r243271 = r243256 * r243270;
double r243272 = 15.234687407;
double r243273 = r243257 + r243272;
double r243274 = r243273 * r243257;
double r243275 = 31.4690115749;
double r243276 = r243274 + r243275;
double r243277 = r243276 * r243257;
double r243278 = 11.9400905721;
double r243279 = r243277 + r243278;
double r243280 = r243279 * r243257;
double r243281 = 0.607771387771;
double r243282 = r243280 + r243281;
double r243283 = r243271 / r243282;
double r243284 = r243255 + r243283;
return r243284;
}
double f(double x, double y, double z, double t, double a, double b) {
double r243285 = z;
double r243286 = -7.333055248087452e+34;
bool r243287 = r243285 <= r243286;
double r243288 = 5.033390768269673e+19;
bool r243289 = r243285 <= r243288;
double r243290 = !r243289;
bool r243291 = r243287 || r243290;
double r243292 = y;
double r243293 = 3.13060547623;
double r243294 = t;
double r243295 = cbrt(r243294);
double r243296 = fabs(r243285);
double r243297 = r243296 / r243295;
double r243298 = r243295 / r243297;
double r243299 = r243295 / r243296;
double r243300 = r243298 * r243299;
double r243301 = r243293 + r243300;
double r243302 = x;
double r243303 = fma(r243292, r243301, r243302);
double r243304 = r243285 * r243293;
double r243305 = 11.1667541262;
double r243306 = r243304 + r243305;
double r243307 = r243306 * r243285;
double r243308 = r243307 + r243294;
double r243309 = r243308 * r243285;
double r243310 = a;
double r243311 = r243309 + r243310;
double r243312 = r243311 * r243285;
double r243313 = b;
double r243314 = r243312 + r243313;
double r243315 = r243292 * r243314;
double r243316 = 15.234687407;
double r243317 = r243285 + r243316;
double r243318 = r243317 * r243285;
double r243319 = 31.4690115749;
double r243320 = r243318 + r243319;
double r243321 = r243320 * r243285;
double r243322 = 11.9400905721;
double r243323 = r243321 + r243322;
double r243324 = r243323 * r243285;
double r243325 = 0.607771387771;
double r243326 = r243324 + r243325;
double r243327 = r243315 / r243326;
double r243328 = r243302 + r243327;
double r243329 = r243291 ? r243303 : r243328;
return r243329;
}




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.5 |
|---|---|
| Target | 1.1 |
| Herbie | 1.5 |
if z < -7.333055248087452e+34 or 5.033390768269673e+19 < z Initial program 58.2
Simplified56.0
Taylor expanded around inf 8.7
Simplified1.9
rmApplied add-sqr-sqrt1.9
Applied add-cube-cbrt1.9
Applied times-frac1.9
Simplified1.9
Simplified1.9
if -7.333055248087452e+34 < z < 5.033390768269673e+19Initial program 1.2
Final simplification1.5
herbie shell --seed 2019199 +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))))