\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 -6.75935725804580378 \cdot 10^{26} \lor \neg \left(x \le 2.33710636375954375 \cdot 10^{32}\right):\\
\;\;\;\;\left(\frac{y}{{x}^{2}} + 4.16438922227999964 \cdot x\right) - 110.11392429848109\\
\mathbf{else}:\\
\;\;\;\;\left(\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)\right) \cdot \frac{1}{\left(\left(\left(x + 43.3400022514000014\right) \cdot x + 263.50507472100003\right) \cdot x + 313.399215894\right) \cdot x + 47.066876606000001}\\
\end{array}double f(double x, double y, double z) {
double r489514 = x;
double r489515 = 2.0;
double r489516 = r489514 - r489515;
double r489517 = 4.16438922228;
double r489518 = r489514 * r489517;
double r489519 = 78.6994924154;
double r489520 = r489518 + r489519;
double r489521 = r489520 * r489514;
double r489522 = 137.519416416;
double r489523 = r489521 + r489522;
double r489524 = r489523 * r489514;
double r489525 = y;
double r489526 = r489524 + r489525;
double r489527 = r489526 * r489514;
double r489528 = z;
double r489529 = r489527 + r489528;
double r489530 = r489516 * r489529;
double r489531 = 43.3400022514;
double r489532 = r489514 + r489531;
double r489533 = r489532 * r489514;
double r489534 = 263.505074721;
double r489535 = r489533 + r489534;
double r489536 = r489535 * r489514;
double r489537 = 313.399215894;
double r489538 = r489536 + r489537;
double r489539 = r489538 * r489514;
double r489540 = 47.066876606;
double r489541 = r489539 + r489540;
double r489542 = r489530 / r489541;
return r489542;
}
double f(double x, double y, double z) {
double r489543 = x;
double r489544 = -6.759357258045804e+26;
bool r489545 = r489543 <= r489544;
double r489546 = 2.3371063637595438e+32;
bool r489547 = r489543 <= r489546;
double r489548 = !r489547;
bool r489549 = r489545 || r489548;
double r489550 = y;
double r489551 = 2.0;
double r489552 = pow(r489543, r489551);
double r489553 = r489550 / r489552;
double r489554 = 4.16438922228;
double r489555 = r489554 * r489543;
double r489556 = r489553 + r489555;
double r489557 = 110.1139242984811;
double r489558 = r489556 - r489557;
double r489559 = 2.0;
double r489560 = r489543 - r489559;
double r489561 = r489543 * r489554;
double r489562 = 78.6994924154;
double r489563 = r489561 + r489562;
double r489564 = r489563 * r489543;
double r489565 = 137.519416416;
double r489566 = r489564 + r489565;
double r489567 = r489566 * r489543;
double r489568 = r489567 + r489550;
double r489569 = r489568 * r489543;
double r489570 = z;
double r489571 = r489569 + r489570;
double r489572 = r489560 * r489571;
double r489573 = 1.0;
double r489574 = 43.3400022514;
double r489575 = r489543 + r489574;
double r489576 = r489575 * r489543;
double r489577 = 263.505074721;
double r489578 = r489576 + r489577;
double r489579 = r489578 * r489543;
double r489580 = 313.399215894;
double r489581 = r489579 + r489580;
double r489582 = r489581 * r489543;
double r489583 = 47.066876606;
double r489584 = r489582 + r489583;
double r489585 = r489573 / r489584;
double r489586 = r489572 * r489585;
double r489587 = r489549 ? r489558 : r489586;
return r489587;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 26.5 |
|---|---|
| Target | 0.4 |
| Herbie | 1.0 |
if x < -6.759357258045804e+26 or 2.3371063637595438e+32 < x Initial program 58.3
Taylor expanded around inf 1.0
if -6.759357258045804e+26 < x < 2.3371063637595438e+32Initial program 0.6
rmApplied div-inv0.9
Final simplification1.0
herbie shell --seed 2020046
(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)))