\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 -8.734460045413716797390213553569907175702 \cdot 10^{73} \lor \neg \left(x \le 1.945381819008962171531860479288483682136 \cdot 10^{55}\right):\\
\;\;\;\;\left(\frac{y}{{x}^{2}} + 4.16438922227999963610045597306452691555 \cdot x\right) - 110.1139242984810948655649553984403610229\\
\mathbf{else}:\\
\;\;\;\;\left(x - 2\right) \cdot \left(\frac{1}{\sqrt{\left(\left(\left(x + 43.3400022514000013984514225739985704422\right) \cdot x + 263.5050747210000281484099105000495910645\right) \cdot x + 313.3992158940000081202015280723571777344\right) \cdot x + 47.06687660600000100430406746454536914825}} \cdot \frac{\left(\left(\left(x \cdot 4.16438922227999963610045597306452691555 + 78.69949241540000173245061887428164482117\right) \cdot x + 137.5194164160000127594685181975364685059\right) \cdot x + y\right) \cdot x + z}{\sqrt{\left(\left(\left(x + 43.3400022514000013984514225739985704422\right) \cdot x + 263.5050747210000281484099105000495910645\right) \cdot x + 313.3992158940000081202015280723571777344\right) \cdot x + 47.06687660600000100430406746454536914825}}\right)\\
\end{array}double f(double x, double y, double z) {
double r394551 = x;
double r394552 = 2.0;
double r394553 = r394551 - r394552;
double r394554 = 4.16438922228;
double r394555 = r394551 * r394554;
double r394556 = 78.6994924154;
double r394557 = r394555 + r394556;
double r394558 = r394557 * r394551;
double r394559 = 137.519416416;
double r394560 = r394558 + r394559;
double r394561 = r394560 * r394551;
double r394562 = y;
double r394563 = r394561 + r394562;
double r394564 = r394563 * r394551;
double r394565 = z;
double r394566 = r394564 + r394565;
double r394567 = r394553 * r394566;
double r394568 = 43.3400022514;
double r394569 = r394551 + r394568;
double r394570 = r394569 * r394551;
double r394571 = 263.505074721;
double r394572 = r394570 + r394571;
double r394573 = r394572 * r394551;
double r394574 = 313.399215894;
double r394575 = r394573 + r394574;
double r394576 = r394575 * r394551;
double r394577 = 47.066876606;
double r394578 = r394576 + r394577;
double r394579 = r394567 / r394578;
return r394579;
}
double f(double x, double y, double z) {
double r394580 = x;
double r394581 = -8.734460045413717e+73;
bool r394582 = r394580 <= r394581;
double r394583 = 1.9453818190089622e+55;
bool r394584 = r394580 <= r394583;
double r394585 = !r394584;
bool r394586 = r394582 || r394585;
double r394587 = y;
double r394588 = 2.0;
double r394589 = pow(r394580, r394588);
double r394590 = r394587 / r394589;
double r394591 = 4.16438922228;
double r394592 = r394591 * r394580;
double r394593 = r394590 + r394592;
double r394594 = 110.1139242984811;
double r394595 = r394593 - r394594;
double r394596 = 2.0;
double r394597 = r394580 - r394596;
double r394598 = 1.0;
double r394599 = 43.3400022514;
double r394600 = r394580 + r394599;
double r394601 = r394600 * r394580;
double r394602 = 263.505074721;
double r394603 = r394601 + r394602;
double r394604 = r394603 * r394580;
double r394605 = 313.399215894;
double r394606 = r394604 + r394605;
double r394607 = r394606 * r394580;
double r394608 = 47.066876606;
double r394609 = r394607 + r394608;
double r394610 = sqrt(r394609);
double r394611 = r394598 / r394610;
double r394612 = r394580 * r394591;
double r394613 = 78.6994924154;
double r394614 = r394612 + r394613;
double r394615 = r394614 * r394580;
double r394616 = 137.519416416;
double r394617 = r394615 + r394616;
double r394618 = r394617 * r394580;
double r394619 = r394618 + r394587;
double r394620 = r394619 * r394580;
double r394621 = z;
double r394622 = r394620 + r394621;
double r394623 = r394622 / r394610;
double r394624 = r394611 * r394623;
double r394625 = r394597 * r394624;
double r394626 = r394586 ? r394595 : r394625;
return r394626;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 27.1 |
|---|---|
| Target | 0.5 |
| Herbie | 0.8 |
if x < -8.734460045413717e+73 or 1.9453818190089622e+55 < x Initial program 63.5
Taylor expanded around inf 0.2
if -8.734460045413717e+73 < x < 1.9453818190089622e+55Initial program 2.5
rmApplied *-un-lft-identity2.5
Applied times-frac0.8
Simplified0.8
rmApplied add-sqr-sqrt1.0
Applied *-un-lft-identity1.0
Applied times-frac1.2
Final simplification0.8
herbie shell --seed 2020002
(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)))