\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 -3.240573328946715190890073478060839868024 \cdot 10^{52} \lor \neg \left(x \le 98007668318672541904438026043392\right):\\
\;\;\;\;\left(\frac{y}{{x}^{2}} + 4.16438922227999963610045597306452691555 \cdot x\right) - 110.1139242984810948655649553984403610229\\
\mathbf{else}:\\
\;\;\;\;\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(\frac{\left(\left(\left(x + 43.3400022514000013984514225739985704422\right) \cdot x\right) \cdot \left(\left(x + 43.3400022514000013984514225739985704422\right) \cdot x\right) - 263.5050747210000281484099105000495910645 \cdot 263.5050747210000281484099105000495910645\right) \cdot x}{\left(x + 43.3400022514000013984514225739985704422\right) \cdot x - 263.5050747210000281484099105000495910645} + 313.3992158940000081202015280723571777344\right) \cdot x + 47.06687660600000100430406746454536914825}\\
\end{array}double f(double x, double y, double z) {
double r401515 = x;
double r401516 = 2.0;
double r401517 = r401515 - r401516;
double r401518 = 4.16438922228;
double r401519 = r401515 * r401518;
double r401520 = 78.6994924154;
double r401521 = r401519 + r401520;
double r401522 = r401521 * r401515;
double r401523 = 137.519416416;
double r401524 = r401522 + r401523;
double r401525 = r401524 * r401515;
double r401526 = y;
double r401527 = r401525 + r401526;
double r401528 = r401527 * r401515;
double r401529 = z;
double r401530 = r401528 + r401529;
double r401531 = r401517 * r401530;
double r401532 = 43.3400022514;
double r401533 = r401515 + r401532;
double r401534 = r401533 * r401515;
double r401535 = 263.505074721;
double r401536 = r401534 + r401535;
double r401537 = r401536 * r401515;
double r401538 = 313.399215894;
double r401539 = r401537 + r401538;
double r401540 = r401539 * r401515;
double r401541 = 47.066876606;
double r401542 = r401540 + r401541;
double r401543 = r401531 / r401542;
return r401543;
}
double f(double x, double y, double z) {
double r401544 = x;
double r401545 = -3.240573328946715e+52;
bool r401546 = r401544 <= r401545;
double r401547 = 9.800766831867254e+31;
bool r401548 = r401544 <= r401547;
double r401549 = !r401548;
bool r401550 = r401546 || r401549;
double r401551 = y;
double r401552 = 2.0;
double r401553 = pow(r401544, r401552);
double r401554 = r401551 / r401553;
double r401555 = 4.16438922228;
double r401556 = r401555 * r401544;
double r401557 = r401554 + r401556;
double r401558 = 110.1139242984811;
double r401559 = r401557 - r401558;
double r401560 = 2.0;
double r401561 = r401544 - r401560;
double r401562 = r401544 * r401555;
double r401563 = 78.6994924154;
double r401564 = r401562 + r401563;
double r401565 = r401564 * r401544;
double r401566 = 137.519416416;
double r401567 = r401565 + r401566;
double r401568 = r401567 * r401544;
double r401569 = r401568 + r401551;
double r401570 = r401569 * r401544;
double r401571 = z;
double r401572 = r401570 + r401571;
double r401573 = r401561 * r401572;
double r401574 = 43.3400022514;
double r401575 = r401544 + r401574;
double r401576 = r401575 * r401544;
double r401577 = r401576 * r401576;
double r401578 = 263.505074721;
double r401579 = r401578 * r401578;
double r401580 = r401577 - r401579;
double r401581 = r401580 * r401544;
double r401582 = r401576 - r401578;
double r401583 = r401581 / r401582;
double r401584 = 313.399215894;
double r401585 = r401583 + r401584;
double r401586 = r401585 * r401544;
double r401587 = 47.066876606;
double r401588 = r401586 + r401587;
double r401589 = r401573 / r401588;
double r401590 = r401550 ? r401559 : r401589;
return r401590;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 26.4 |
|---|---|
| Target | 0.5 |
| Herbie | 0.9 |
if x < -3.240573328946715e+52 or 9.800766831867254e+31 < x Initial program 60.4
rmApplied associate-/l*56.7
rmApplied *-un-lft-identity56.7
Applied *-un-lft-identity56.7
Applied times-frac56.7
Applied *-un-lft-identity56.7
Applied times-frac56.7
Simplified56.7
Simplified56.7
Taylor expanded around inf 0.9
if -3.240573328946715e+52 < x < 9.800766831867254e+31Initial program 0.9
rmApplied flip-+0.9
Applied associate-*l/0.9
Final simplification0.9
herbie shell --seed 2019350
(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)))