\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.74032442839244311 \cdot 10^{61} \lor \neg \left(x \le 27074635474235478000\right):\\
\;\;\;\;\left(\frac{y}{{x}^{2}} + 4.16438922227999964 \cdot x\right) - 110.11392429848109\\
\mathbf{else}:\\
\;\;\;\;\left(x - 2\right) \cdot \frac{\left(\left(\left(x \cdot 4.16438922227999964 + 78.6994924154000017\right) \cdot x + 137.51941641600001\right) \cdot x + y\right) \cdot x + z}{\left(\frac{\left(\left(\left(x + 43.3400022514000014\right) \cdot x\right) \cdot \left(\left(x + 43.3400022514000014\right) \cdot x\right) - 263.50507472100003 \cdot 263.50507472100003\right) \cdot x}{\left(x + 43.3400022514000014\right) \cdot x - 263.50507472100003} + 313.399215894\right) \cdot x + 47.066876606000001}\\
\end{array}double f(double x, double y, double z) {
double r509586 = x;
double r509587 = 2.0;
double r509588 = r509586 - r509587;
double r509589 = 4.16438922228;
double r509590 = r509586 * r509589;
double r509591 = 78.6994924154;
double r509592 = r509590 + r509591;
double r509593 = r509592 * r509586;
double r509594 = 137.519416416;
double r509595 = r509593 + r509594;
double r509596 = r509595 * r509586;
double r509597 = y;
double r509598 = r509596 + r509597;
double r509599 = r509598 * r509586;
double r509600 = z;
double r509601 = r509599 + r509600;
double r509602 = r509588 * r509601;
double r509603 = 43.3400022514;
double r509604 = r509586 + r509603;
double r509605 = r509604 * r509586;
double r509606 = 263.505074721;
double r509607 = r509605 + r509606;
double r509608 = r509607 * r509586;
double r509609 = 313.399215894;
double r509610 = r509608 + r509609;
double r509611 = r509610 * r509586;
double r509612 = 47.066876606;
double r509613 = r509611 + r509612;
double r509614 = r509602 / r509613;
return r509614;
}
double f(double x, double y, double z) {
double r509615 = x;
double r509616 = -1.740324428392443e+61;
bool r509617 = r509615 <= r509616;
double r509618 = 2.707463547423548e+19;
bool r509619 = r509615 <= r509618;
double r509620 = !r509619;
bool r509621 = r509617 || r509620;
double r509622 = y;
double r509623 = 2.0;
double r509624 = pow(r509615, r509623);
double r509625 = r509622 / r509624;
double r509626 = 4.16438922228;
double r509627 = r509626 * r509615;
double r509628 = r509625 + r509627;
double r509629 = 110.1139242984811;
double r509630 = r509628 - r509629;
double r509631 = 2.0;
double r509632 = r509615 - r509631;
double r509633 = r509615 * r509626;
double r509634 = 78.6994924154;
double r509635 = r509633 + r509634;
double r509636 = r509635 * r509615;
double r509637 = 137.519416416;
double r509638 = r509636 + r509637;
double r509639 = r509638 * r509615;
double r509640 = r509639 + r509622;
double r509641 = r509640 * r509615;
double r509642 = z;
double r509643 = r509641 + r509642;
double r509644 = 43.3400022514;
double r509645 = r509615 + r509644;
double r509646 = r509645 * r509615;
double r509647 = r509646 * r509646;
double r509648 = 263.505074721;
double r509649 = r509648 * r509648;
double r509650 = r509647 - r509649;
double r509651 = r509650 * r509615;
double r509652 = r509646 - r509648;
double r509653 = r509651 / r509652;
double r509654 = 313.399215894;
double r509655 = r509653 + r509654;
double r509656 = r509655 * r509615;
double r509657 = 47.066876606;
double r509658 = r509656 + r509657;
double r509659 = r509643 / r509658;
double r509660 = r509632 * r509659;
double r509661 = r509621 ? r509630 : r509660;
return r509661;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 26.9 |
|---|---|
| Target | 0.5 |
| Herbie | 0.7 |
if x < -1.740324428392443e+61 or 2.707463547423548e+19 < x Initial program 59.9
Taylor expanded around inf 1.1
if -1.740324428392443e+61 < x < 2.707463547423548e+19Initial program 1.1
rmApplied *-un-lft-identity1.1
Applied times-frac0.5
Simplified0.5
rmApplied flip-+0.5
Applied associate-*l/0.5
Final simplification0.7
herbie shell --seed 2020057
(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)))