\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 -18446644311559690167397500658474620551170:\\
\;\;\;\;\left(\frac{y}{x \cdot x} + 4.16438922227999963610045597306452691555 \cdot x\right) - 110.1139242984810948655649553984403610229\\
\mathbf{elif}\;x \le 5.400940663197947339625629709488573945958 \cdot 10^{71}:\\
\;\;\;\;\frac{\frac{x - 2}{47.06687660600000100430406746454536914825 + \left(313.3992158940000081202015280723571777344 + \left(263.5050747210000281484099105000495910645 + x \cdot \left(43.3400022514000013984514225739985704422 + x\right)\right) \cdot x\right) \cdot x}}{\frac{1}{z + \left(y + x \cdot \left(137.5194164160000127594685181975364685059 + \left(4.16438922227999963610045597306452691555 \cdot x + 78.69949241540000173245061887428164482117\right) \cdot x\right)\right) \cdot x}}\\
\mathbf{else}:\\
\;\;\;\;\left(\frac{y}{x \cdot x} + 4.16438922227999963610045597306452691555 \cdot x\right) - 110.1139242984810948655649553984403610229\\
\end{array}double f(double x, double y, double z) {
double r18451590 = x;
double r18451591 = 2.0;
double r18451592 = r18451590 - r18451591;
double r18451593 = 4.16438922228;
double r18451594 = r18451590 * r18451593;
double r18451595 = 78.6994924154;
double r18451596 = r18451594 + r18451595;
double r18451597 = r18451596 * r18451590;
double r18451598 = 137.519416416;
double r18451599 = r18451597 + r18451598;
double r18451600 = r18451599 * r18451590;
double r18451601 = y;
double r18451602 = r18451600 + r18451601;
double r18451603 = r18451602 * r18451590;
double r18451604 = z;
double r18451605 = r18451603 + r18451604;
double r18451606 = r18451592 * r18451605;
double r18451607 = 43.3400022514;
double r18451608 = r18451590 + r18451607;
double r18451609 = r18451608 * r18451590;
double r18451610 = 263.505074721;
double r18451611 = r18451609 + r18451610;
double r18451612 = r18451611 * r18451590;
double r18451613 = 313.399215894;
double r18451614 = r18451612 + r18451613;
double r18451615 = r18451614 * r18451590;
double r18451616 = 47.066876606;
double r18451617 = r18451615 + r18451616;
double r18451618 = r18451606 / r18451617;
return r18451618;
}
double f(double x, double y, double z) {
double r18451619 = x;
double r18451620 = -1.844664431155969e+40;
bool r18451621 = r18451619 <= r18451620;
double r18451622 = y;
double r18451623 = r18451619 * r18451619;
double r18451624 = r18451622 / r18451623;
double r18451625 = 4.16438922228;
double r18451626 = r18451625 * r18451619;
double r18451627 = r18451624 + r18451626;
double r18451628 = 110.1139242984811;
double r18451629 = r18451627 - r18451628;
double r18451630 = 5.400940663197947e+71;
bool r18451631 = r18451619 <= r18451630;
double r18451632 = 2.0;
double r18451633 = r18451619 - r18451632;
double r18451634 = 47.066876606;
double r18451635 = 313.399215894;
double r18451636 = 263.505074721;
double r18451637 = 43.3400022514;
double r18451638 = r18451637 + r18451619;
double r18451639 = r18451619 * r18451638;
double r18451640 = r18451636 + r18451639;
double r18451641 = r18451640 * r18451619;
double r18451642 = r18451635 + r18451641;
double r18451643 = r18451642 * r18451619;
double r18451644 = r18451634 + r18451643;
double r18451645 = r18451633 / r18451644;
double r18451646 = 1.0;
double r18451647 = z;
double r18451648 = 137.519416416;
double r18451649 = 78.6994924154;
double r18451650 = r18451626 + r18451649;
double r18451651 = r18451650 * r18451619;
double r18451652 = r18451648 + r18451651;
double r18451653 = r18451619 * r18451652;
double r18451654 = r18451622 + r18451653;
double r18451655 = r18451654 * r18451619;
double r18451656 = r18451647 + r18451655;
double r18451657 = r18451646 / r18451656;
double r18451658 = r18451645 / r18451657;
double r18451659 = r18451631 ? r18451658 : r18451629;
double r18451660 = r18451621 ? r18451629 : r18451659;
return r18451660;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 26.7 |
|---|---|
| Target | 0.6 |
| Herbie | 0.8 |
if x < -1.844664431155969e+40 or 5.400940663197947e+71 < x Initial program 62.4
rmApplied associate-/l*59.7
rmApplied div-inv59.7
Applied associate-/r*59.7
Taylor expanded around inf 0.5
Simplified0.5
if -1.844664431155969e+40 < x < 5.400940663197947e+71Initial program 2.3
rmApplied associate-/l*0.9
rmApplied div-inv0.9
Applied associate-/r*1.0
Final simplification0.8
herbie shell --seed 2019200
(FPCore (x y z)
:name "Numeric.SpecFunctions:logGamma from math-functions-0.1.5.2, C"
:herbie-target
(if (< x -3.326128725870005e+62) (- (+ (/ y (* x x)) (* 4.16438922228 x)) 110.1139242984811) (if (< x 9.429991714554673e+55) (* (/ (- x 2.0) 1.0) (/ (+ (* (+ (* (+ (* (+ (* 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.0) (+ (* (+ (* (+ (* (+ (* x 4.16438922228) 78.6994924154) x) 137.519416416) x) y) x) z)) (+ (* (+ (* (+ (* (+ x 43.3400022514) x) 263.505074721) x) 313.399215894) x) 47.066876606)))