\frac{\left(x - 2\right) \cdot \left(\left(\left(\left(x \cdot 4.16438922227999963610045597306452691555 + 78.69949241540000173245061887428164482117\right) \cdot x + 137.5194164160000127594685181975364685059\right) \cdot x + y\right) \cdot x + z\right)}{\left(\left(\left(x + 43.3400022514000013984514225739985704422\right) \cdot x + 263.5050747210000281484099105000495910645\right) \cdot x + 313.3992158940000081202015280723571777344\right) \cdot x + 47.06687660600000100430406746454536914825}\begin{array}{l}
\mathbf{if}\;x \le -2252101360098186826350592 \lor \neg \left(x \le 14456844266184348924014231552\right):\\
\;\;\;\;\left(\frac{y}{{x}^{2}} + \frac{4688685437421479}{1125899906842624} \cdot x\right) - \frac{1937144642339619}{17592186044416}\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(x - 2\right) \cdot \left(\left(\sqrt{\left(x \cdot \frac{4688685437421479}{1125899906842624} + \frac{5537984448691291}{70368744177664}\right) \cdot x + \frac{604816789577447}{4398046511104}} \cdot \left(\sqrt{\left(x \cdot \frac{4688685437421479}{1125899906842624} + \frac{5537984448691291}{70368744177664}\right) \cdot x + \frac{604816789577447}{4398046511104}} \cdot x\right) + y\right) \cdot x + z\right)}{\left(\left(\left(x + \frac{6099563062176297}{140737488355328}\right) \cdot x + \frac{1158907574534893}{4398046511104}\right) \cdot x + \frac{172293041005667}{549755813888}\right) \cdot x + \frac{6624073998258585}{140737488355328}}\\
\end{array}double f(double x, double y, double z) {
double r316513 = x;
double r316514 = 2.0;
double r316515 = r316513 - r316514;
double r316516 = 4.16438922228;
double r316517 = r316513 * r316516;
double r316518 = 78.6994924154;
double r316519 = r316517 + r316518;
double r316520 = r316519 * r316513;
double r316521 = 137.519416416;
double r316522 = r316520 + r316521;
double r316523 = r316522 * r316513;
double r316524 = y;
double r316525 = r316523 + r316524;
double r316526 = r316525 * r316513;
double r316527 = z;
double r316528 = r316526 + r316527;
double r316529 = r316515 * r316528;
double r316530 = 43.3400022514;
double r316531 = r316513 + r316530;
double r316532 = r316531 * r316513;
double r316533 = 263.505074721;
double r316534 = r316532 + r316533;
double r316535 = r316534 * r316513;
double r316536 = 313.399215894;
double r316537 = r316535 + r316536;
double r316538 = r316537 * r316513;
double r316539 = 47.066876606;
double r316540 = r316538 + r316539;
double r316541 = r316529 / r316540;
return r316541;
}
double f(double x, double y, double z) {
double r316542 = x;
double r316543 = -2.2521013600981868e+24;
bool r316544 = r316542 <= r316543;
double r316545 = 1.445684426618435e+28;
bool r316546 = r316542 <= r316545;
double r316547 = !r316546;
bool r316548 = r316544 || r316547;
double r316549 = y;
double r316550 = 2.0;
double r316551 = pow(r316542, r316550);
double r316552 = r316549 / r316551;
double r316553 = 4688685437421479.0;
double r316554 = 1125899906842624.0;
double r316555 = r316553 / r316554;
double r316556 = r316555 * r316542;
double r316557 = r316552 + r316556;
double r316558 = 1937144642339619.0;
double r316559 = 17592186044416.0;
double r316560 = r316558 / r316559;
double r316561 = r316557 - r316560;
double r316562 = 2.0;
double r316563 = r316542 - r316562;
double r316564 = r316542 * r316555;
double r316565 = 5537984448691291.0;
double r316566 = 70368744177664.0;
double r316567 = r316565 / r316566;
double r316568 = r316564 + r316567;
double r316569 = r316568 * r316542;
double r316570 = 604816789577447.0;
double r316571 = 4398046511104.0;
double r316572 = r316570 / r316571;
double r316573 = r316569 + r316572;
double r316574 = sqrt(r316573);
double r316575 = r316574 * r316542;
double r316576 = r316574 * r316575;
double r316577 = r316576 + r316549;
double r316578 = r316577 * r316542;
double r316579 = z;
double r316580 = r316578 + r316579;
double r316581 = r316563 * r316580;
double r316582 = 6099563062176297.0;
double r316583 = 140737488355328.0;
double r316584 = r316582 / r316583;
double r316585 = r316542 + r316584;
double r316586 = r316585 * r316542;
double r316587 = 1158907574534893.0;
double r316588 = r316587 / r316571;
double r316589 = r316586 + r316588;
double r316590 = r316589 * r316542;
double r316591 = 172293041005667.0;
double r316592 = 549755813888.0;
double r316593 = r316591 / r316592;
double r316594 = r316590 + r316593;
double r316595 = r316594 * r316542;
double r316596 = 6624073998258585.0;
double r316597 = r316596 / r316583;
double r316598 = r316595 + r316597;
double r316599 = r316581 / r316598;
double r316600 = r316548 ? r316561 : r316599;
return r316600;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 26.1 |
|---|---|
| Target | 0.6 |
| Herbie | 1.1 |
if x < -2.2521013600981868e+24 or 1.445684426618435e+28 < x Initial program 57.5
Taylor expanded around inf 1.6
Simplified1.6
if -2.2521013600981868e+24 < x < 1.445684426618435e+28Initial program 0.6
rmApplied add-sqr-sqrt0.7
Applied associate-*l*0.7
Simplified0.7
Final simplification1.1
herbie shell --seed 2019303
(FPCore (x y z)
:name "Numeric.SpecFunctions:logGamma from math-functions-0.1.5.2, C"
:precision binary64
:herbie-target
(if (< x -3.3261287258700048e62) (- (+ (/ y (* x x)) (* 4.16438922227999964 x)) 110.11392429848109) (if (< x 9.4299917145546727e55) (* (/ (- x 2) 1) (/ (+ (* (+ (* (+ (* (+ (* x 4.16438922227999964) 78.6994924154000017) x) 137.51941641600001) x) y) x) z) (+ (* (+ (+ (* 263.50507472100003 x) (+ (* 43.3400022514000014 (* x x)) (* x (* x x)))) 313.399215894) x) 47.066876606000001))) (- (+ (/ y (* x x)) (* 4.16438922227999964 x)) 110.11392429848109)))
(/ (* (- x 2) (+ (* (+ (* (+ (* (+ (* x 4.16438922227999964) 78.6994924154000017) x) 137.51941641600001) x) y) x) z)) (+ (* (+ (* (+ (* (+ x 43.3400022514000014) x) 263.50507472100003) x) 313.399215894) x) 47.066876606000001)))