\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 r242595 = x;
double r242596 = 2.0;
double r242597 = r242595 - r242596;
double r242598 = 4.16438922228;
double r242599 = r242595 * r242598;
double r242600 = 78.6994924154;
double r242601 = r242599 + r242600;
double r242602 = r242601 * r242595;
double r242603 = 137.519416416;
double r242604 = r242602 + r242603;
double r242605 = r242604 * r242595;
double r242606 = y;
double r242607 = r242605 + r242606;
double r242608 = r242607 * r242595;
double r242609 = z;
double r242610 = r242608 + r242609;
double r242611 = r242597 * r242610;
double r242612 = 43.3400022514;
double r242613 = r242595 + r242612;
double r242614 = r242613 * r242595;
double r242615 = 263.505074721;
double r242616 = r242614 + r242615;
double r242617 = r242616 * r242595;
double r242618 = 313.399215894;
double r242619 = r242617 + r242618;
double r242620 = r242619 * r242595;
double r242621 = 47.066876606;
double r242622 = r242620 + r242621;
double r242623 = r242611 / r242622;
return r242623;
}
double f(double x, double y, double z) {
double r242624 = x;
double r242625 = -9.168391507400123e+69;
bool r242626 = r242624 <= r242625;
double r242627 = 1.9308694312533926e+69;
bool r242628 = r242624 <= r242627;
double r242629 = !r242628;
bool r242630 = r242626 || r242629;
double r242631 = 4.16438922228;
double r242632 = y;
double r242633 = 2.0;
double r242634 = pow(r242624, r242633);
double r242635 = r242632 / r242634;
double r242636 = fma(r242624, r242631, r242635);
double r242637 = 110.11392429848108;
double r242638 = r242636 - r242637;
double r242639 = 2.0;
double r242640 = r242624 - r242639;
double r242641 = 78.6994924154;
double r242642 = fma(r242624, r242631, r242641);
double r242643 = 137.519416416;
double r242644 = fma(r242642, r242624, r242643);
double r242645 = fma(r242644, r242624, r242632);
double r242646 = z;
double r242647 = fma(r242645, r242624, r242646);
double r242648 = 43.3400022514;
double r242649 = r242624 + r242648;
double r242650 = 263.505074721;
double r242651 = fma(r242649, r242624, r242650);
double r242652 = 313.399215894;
double r242653 = fma(r242651, r242624, r242652);
double r242654 = 47.066876606;
double r242655 = fma(r242653, r242624, r242654);
double r242656 = r242647 / r242655;
double r242657 = r242640 * r242656;
double r242658 = r242630 ? r242638 : r242657;
return r242658;
}




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)))