\frac{\left(x - 2\right) \cdot \left(\left(\left(\left(x \cdot 4.16438922227999964 + 78.6994924154000017\right) \cdot x + 137.51941641600001\right) \cdot x + y\right) \cdot x + z\right)}{\left(\left(\left(x + 43.3400022514000014\right) \cdot x + 263.50507472100003\right) \cdot x + 313.399215894\right) \cdot x + 47.066876606000001}\begin{array}{l}
\mathbf{if}\;x \le -1.864511716540988 \cdot 10^{34}:\\
\;\;\;\;\left(x - 2\right) \cdot \left(1 \cdot \left(\left(\frac{y}{{x}^{3}} + 4.16438922227999964\right) - 101.785145853921094 \cdot \frac{1}{x}\right)\right)\\
\mathbf{elif}\;x \le 1.6132622111277306 \cdot 10^{68}:\\
\;\;\;\;\left(x - 2\right) \cdot \left(1 \cdot \frac{\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(x, 4.16438922227999964, 78.6994924154000017\right), x, 137.51941641600001\right), x, y\right), x, z\right)}{\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(x + 43.3400022514000014, x, 263.50507472100003\right), x, 313.399215894\right), x, 47.066876606000001\right)}\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(x, 4.16438922227999964, \frac{y}{{x}^{2}} - 110.11392429848109\right)\\
\end{array}double f(double x, double y, double z) {
double r346310 = x;
double r346311 = 2.0;
double r346312 = r346310 - r346311;
double r346313 = 4.16438922228;
double r346314 = r346310 * r346313;
double r346315 = 78.6994924154;
double r346316 = r346314 + r346315;
double r346317 = r346316 * r346310;
double r346318 = 137.519416416;
double r346319 = r346317 + r346318;
double r346320 = r346319 * r346310;
double r346321 = y;
double r346322 = r346320 + r346321;
double r346323 = r346322 * r346310;
double r346324 = z;
double r346325 = r346323 + r346324;
double r346326 = r346312 * r346325;
double r346327 = 43.3400022514;
double r346328 = r346310 + r346327;
double r346329 = r346328 * r346310;
double r346330 = 263.505074721;
double r346331 = r346329 + r346330;
double r346332 = r346331 * r346310;
double r346333 = 313.399215894;
double r346334 = r346332 + r346333;
double r346335 = r346334 * r346310;
double r346336 = 47.066876606;
double r346337 = r346335 + r346336;
double r346338 = r346326 / r346337;
return r346338;
}
double f(double x, double y, double z) {
double r346339 = x;
double r346340 = -1.8645117165409878e+34;
bool r346341 = r346339 <= r346340;
double r346342 = 2.0;
double r346343 = r346339 - r346342;
double r346344 = 1.0;
double r346345 = y;
double r346346 = 3.0;
double r346347 = pow(r346339, r346346);
double r346348 = r346345 / r346347;
double r346349 = 4.16438922228;
double r346350 = r346348 + r346349;
double r346351 = 101.7851458539211;
double r346352 = r346344 / r346339;
double r346353 = r346351 * r346352;
double r346354 = r346350 - r346353;
double r346355 = r346344 * r346354;
double r346356 = r346343 * r346355;
double r346357 = 1.6132622111277306e+68;
bool r346358 = r346339 <= r346357;
double r346359 = 78.6994924154;
double r346360 = fma(r346339, r346349, r346359);
double r346361 = 137.519416416;
double r346362 = fma(r346360, r346339, r346361);
double r346363 = fma(r346362, r346339, r346345);
double r346364 = z;
double r346365 = fma(r346363, r346339, r346364);
double r346366 = 43.3400022514;
double r346367 = r346339 + r346366;
double r346368 = 263.505074721;
double r346369 = fma(r346367, r346339, r346368);
double r346370 = 313.399215894;
double r346371 = fma(r346369, r346339, r346370);
double r346372 = 47.066876606;
double r346373 = fma(r346371, r346339, r346372);
double r346374 = r346365 / r346373;
double r346375 = r346344 * r346374;
double r346376 = r346343 * r346375;
double r346377 = 2.0;
double r346378 = pow(r346339, r346377);
double r346379 = r346345 / r346378;
double r346380 = 110.1139242984811;
double r346381 = r346379 - r346380;
double r346382 = fma(r346339, r346349, r346381);
double r346383 = r346358 ? r346376 : r346382;
double r346384 = r346341 ? r346356 : r346383;
return r346384;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 26.6 |
|---|---|
| Target | 0.5 |
| Herbie | 0.7 |
if x < -1.8645117165409878e+34Initial program 59.0
Simplified54.8
rmApplied div-inv54.7
rmApplied *-un-lft-identity54.7
Applied *-un-lft-identity54.7
Applied times-frac54.7
Applied add-cube-cbrt54.7
Applied times-frac54.7
Simplified54.7
Simplified54.7
rmApplied add-sqr-sqrt54.8
Applied associate-/r*54.8
Taylor expanded around inf 1.6
if -1.8645117165409878e+34 < x < 1.6132622111277306e+68Initial program 2.0
Simplified0.8
rmApplied div-inv0.8
rmApplied *-un-lft-identity0.8
Applied *-un-lft-identity0.8
Applied times-frac0.8
Applied add-cube-cbrt0.8
Applied times-frac0.8
Simplified0.8
Simplified0.6
if 1.6132622111277306e+68 < x Initial program 64.0
Simplified62.2
Taylor expanded around inf 0.1
Simplified0.1
Final simplification0.7
herbie shell --seed 2020036 +o rules:numerics
(FPCore (x y z)
:name "Numeric.SpecFunctions:logGamma from math-functions-0.1.5.2, C"
:precision binary64
:herbie-target
(if (< x -3.326128725870005e+62) (- (+ (/ y (* x x)) (* 4.16438922228 x)) 110.1139242984811) (if (< x 9.429991714554673e+55) (* (/ (- x 2) 1) (/ (+ (* (+ (* (+ (* (+ (* x 4.16438922228) 78.6994924154) x) 137.519416416) x) y) x) z) (+ (* (+ (+ (* 263.505074721 x) (+ (* 43.3400022514 (* x x)) (* x (* x x)))) 313.399215894) x) 47.066876606))) (- (+ (/ y (* x x)) (* 4.16438922228 x)) 110.1139242984811)))
(/ (* (- x 2) (+ (* (+ (* (+ (* (+ (* x 4.16438922228) 78.6994924154) x) 137.519416416) x) y) x) z)) (+ (* (+ (* (+ (* (+ x 43.3400022514) x) 263.505074721) x) 313.399215894) x) 47.066876606)))