\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 -9.168391507400123006303027147886417404254 \cdot 10^{69} \lor \neg \left(x \le 1.930869431253392580588428718419400205994 \cdot 10^{69}\right):\\
\;\;\;\;\mathsf{fma}\left(x, 4.16438922227999963610045597306452691555, \frac{y}{{x}^{2}}\right) - 110.1139242984810806547102401964366436005\\
\mathbf{else}:\\
\;\;\;\;\left(x - 2\right) \cdot \frac{\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(x, 4.16438922227999963610045597306452691555, 78.69949241540000173245061887428164482117\right), x, 137.5194164160000127594685181975364685059\right), x, y\right), x, z\right)}{\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(x + 43.3400022514000013984514225739985704422, x, 263.5050747210000281484099105000495910645\right), x, 313.3992158940000081202015280723571777344\right), x, 47.06687660600000100430406746454536914825\right)}\\
\end{array}double f(double x, double y, double z) {
double r259644 = x;
double r259645 = 2.0;
double r259646 = r259644 - r259645;
double r259647 = 4.16438922228;
double r259648 = r259644 * r259647;
double r259649 = 78.6994924154;
double r259650 = r259648 + r259649;
double r259651 = r259650 * r259644;
double r259652 = 137.519416416;
double r259653 = r259651 + r259652;
double r259654 = r259653 * r259644;
double r259655 = y;
double r259656 = r259654 + r259655;
double r259657 = r259656 * r259644;
double r259658 = z;
double r259659 = r259657 + r259658;
double r259660 = r259646 * r259659;
double r259661 = 43.3400022514;
double r259662 = r259644 + r259661;
double r259663 = r259662 * r259644;
double r259664 = 263.505074721;
double r259665 = r259663 + r259664;
double r259666 = r259665 * r259644;
double r259667 = 313.399215894;
double r259668 = r259666 + r259667;
double r259669 = r259668 * r259644;
double r259670 = 47.066876606;
double r259671 = r259669 + r259670;
double r259672 = r259660 / r259671;
return r259672;
}
double f(double x, double y, double z) {
double r259673 = x;
double r259674 = -9.168391507400123e+69;
bool r259675 = r259673 <= r259674;
double r259676 = 1.9308694312533926e+69;
bool r259677 = r259673 <= r259676;
double r259678 = !r259677;
bool r259679 = r259675 || r259678;
double r259680 = 4.16438922228;
double r259681 = y;
double r259682 = 2.0;
double r259683 = pow(r259673, r259682);
double r259684 = r259681 / r259683;
double r259685 = fma(r259673, r259680, r259684);
double r259686 = 110.11392429848108;
double r259687 = r259685 - r259686;
double r259688 = 2.0;
double r259689 = r259673 - r259688;
double r259690 = 78.6994924154;
double r259691 = fma(r259673, r259680, r259690);
double r259692 = 137.519416416;
double r259693 = fma(r259691, r259673, r259692);
double r259694 = fma(r259693, r259673, r259681);
double r259695 = z;
double r259696 = fma(r259694, r259673, r259695);
double r259697 = 43.3400022514;
double r259698 = r259673 + r259697;
double r259699 = 263.505074721;
double r259700 = fma(r259698, r259673, r259699);
double r259701 = 313.399215894;
double r259702 = fma(r259700, r259673, r259701);
double r259703 = 47.066876606;
double r259704 = fma(r259702, r259673, r259703);
double r259705 = r259696 / r259704;
double r259706 = r259689 * r259705;
double r259707 = r259679 ? r259687 : r259706;
return r259707;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 26.8 |
|---|---|
| Target | 0.6 |
| Herbie | 0.5 |
if x < -9.168391507400123e+69 or 1.9308694312533926e+69 < x Initial program 64.0
Simplified62.4
rmApplied flip--62.4
Applied associate-/l/62.4
Taylor expanded around inf 0.0
Simplified0.0
if -9.168391507400123e+69 < x < 1.9308694312533926e+69Initial program 3.4
Simplified1.0
rmApplied div-inv1.0
Simplified0.8
Final simplification0.5
herbie shell --seed 2019323 +o rules:numerics
(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)))