\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 -2.37134358210142024 \cdot 10^{57} \lor \neg \left(x \le 6.95058600294961662 \cdot 10^{46}\right):\\
\;\;\;\;\left(\frac{y}{{x}^{2}} + 4.16438922227999964 \cdot x\right) - 110.11392429848109\\
\mathbf{else}:\\
\;\;\;\;\frac{x - 2}{\left(\left(\left(\left(x + 43.3400022514000014\right) \cdot x + 263.50507472100003\right) \cdot x + 313.399215894\right) \cdot x + 47.066876606000001\right) \cdot \frac{1}{\left(\left(\left(x \cdot 4.16438922227999964 + 78.6994924154000017\right) \cdot x + 137.51941641600001\right) \cdot x + y\right) \cdot x + z}}\\
\end{array}double f(double x, double y, double z) {
double r436526 = x;
double r436527 = 2.0;
double r436528 = r436526 - r436527;
double r436529 = 4.16438922228;
double r436530 = r436526 * r436529;
double r436531 = 78.6994924154;
double r436532 = r436530 + r436531;
double r436533 = r436532 * r436526;
double r436534 = 137.519416416;
double r436535 = r436533 + r436534;
double r436536 = r436535 * r436526;
double r436537 = y;
double r436538 = r436536 + r436537;
double r436539 = r436538 * r436526;
double r436540 = z;
double r436541 = r436539 + r436540;
double r436542 = r436528 * r436541;
double r436543 = 43.3400022514;
double r436544 = r436526 + r436543;
double r436545 = r436544 * r436526;
double r436546 = 263.505074721;
double r436547 = r436545 + r436546;
double r436548 = r436547 * r436526;
double r436549 = 313.399215894;
double r436550 = r436548 + r436549;
double r436551 = r436550 * r436526;
double r436552 = 47.066876606;
double r436553 = r436551 + r436552;
double r436554 = r436542 / r436553;
return r436554;
}
double f(double x, double y, double z) {
double r436555 = x;
double r436556 = -2.3713435821014202e+57;
bool r436557 = r436555 <= r436556;
double r436558 = 6.950586002949617e+46;
bool r436559 = r436555 <= r436558;
double r436560 = !r436559;
bool r436561 = r436557 || r436560;
double r436562 = y;
double r436563 = 2.0;
double r436564 = pow(r436555, r436563);
double r436565 = r436562 / r436564;
double r436566 = 4.16438922228;
double r436567 = r436566 * r436555;
double r436568 = r436565 + r436567;
double r436569 = 110.1139242984811;
double r436570 = r436568 - r436569;
double r436571 = 2.0;
double r436572 = r436555 - r436571;
double r436573 = 43.3400022514;
double r436574 = r436555 + r436573;
double r436575 = r436574 * r436555;
double r436576 = 263.505074721;
double r436577 = r436575 + r436576;
double r436578 = r436577 * r436555;
double r436579 = 313.399215894;
double r436580 = r436578 + r436579;
double r436581 = r436580 * r436555;
double r436582 = 47.066876606;
double r436583 = r436581 + r436582;
double r436584 = 1.0;
double r436585 = r436555 * r436566;
double r436586 = 78.6994924154;
double r436587 = r436585 + r436586;
double r436588 = r436587 * r436555;
double r436589 = 137.519416416;
double r436590 = r436588 + r436589;
double r436591 = r436590 * r436555;
double r436592 = r436591 + r436562;
double r436593 = r436592 * r436555;
double r436594 = z;
double r436595 = r436593 + r436594;
double r436596 = r436584 / r436595;
double r436597 = r436583 * r436596;
double r436598 = r436572 / r436597;
double r436599 = r436561 ? r436570 : r436598;
return r436599;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 26.3 |
|---|---|
| Target | 0.4 |
| Herbie | 0.7 |
if x < -2.3713435821014202e+57 or 6.950586002949617e+46 < x Initial program 62.0
Taylor expanded around inf 0.5
if -2.3713435821014202e+57 < x < 6.950586002949617e+46Initial program 1.1
rmApplied associate-/l*0.7
rmApplied div-inv0.7
Final simplification0.7
herbie shell --seed 2020042
(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)))