\frac{\left(x - 2\right) \cdot \left(\left(\left(\left(x \cdot 4.16438922227999964 + 78.6994924154000017\right) \cdot x + 137.51941641600001\right) \cdot x + y\right) \cdot x + z\right)}{\left(\left(\left(x + 43.3400022514000014\right) \cdot x + 263.50507472100003\right) \cdot x + 313.399215894\right) \cdot x + 47.066876606000001}\begin{array}{l}
\mathbf{if}\;x \le -14572255947977734100 \lor \neg \left(x \le 3.68584910506240575 \cdot 10^{31}\right):\\
\;\;\;\;\mathsf{fma}\left(x, 4.16438922227999964, \frac{y}{{x}^{2}}\right) - 110.11392429848109\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(x - 2\right) \cdot \mathsf{fma}\left(x, \mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(x, 4.16438922227999964, 78.6994924154000017\right), x, 137.51941641600001\right), x, y\right), z\right)}{\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(x + 43.3400022514000014, x, 263.50507472100003\right), x, 313.399215894\right), x, 47.066876606000001\right)}\\
\end{array}double f(double x, double y, double z) {
double r244542 = x;
double r244543 = 2.0;
double r244544 = r244542 - r244543;
double r244545 = 4.16438922228;
double r244546 = r244542 * r244545;
double r244547 = 78.6994924154;
double r244548 = r244546 + r244547;
double r244549 = r244548 * r244542;
double r244550 = 137.519416416;
double r244551 = r244549 + r244550;
double r244552 = r244551 * r244542;
double r244553 = y;
double r244554 = r244552 + r244553;
double r244555 = r244554 * r244542;
double r244556 = z;
double r244557 = r244555 + r244556;
double r244558 = r244544 * r244557;
double r244559 = 43.3400022514;
double r244560 = r244542 + r244559;
double r244561 = r244560 * r244542;
double r244562 = 263.505074721;
double r244563 = r244561 + r244562;
double r244564 = r244563 * r244542;
double r244565 = 313.399215894;
double r244566 = r244564 + r244565;
double r244567 = r244566 * r244542;
double r244568 = 47.066876606;
double r244569 = r244567 + r244568;
double r244570 = r244558 / r244569;
return r244570;
}
double f(double x, double y, double z) {
double r244571 = x;
double r244572 = -1.4572255947977734e+19;
bool r244573 = r244571 <= r244572;
double r244574 = 3.6858491050624058e+31;
bool r244575 = r244571 <= r244574;
double r244576 = !r244575;
bool r244577 = r244573 || r244576;
double r244578 = 4.16438922228;
double r244579 = y;
double r244580 = 2.0;
double r244581 = pow(r244571, r244580);
double r244582 = r244579 / r244581;
double r244583 = fma(r244571, r244578, r244582);
double r244584 = 110.1139242984811;
double r244585 = r244583 - r244584;
double r244586 = 2.0;
double r244587 = r244571 - r244586;
double r244588 = 78.6994924154;
double r244589 = fma(r244571, r244578, r244588);
double r244590 = 137.519416416;
double r244591 = fma(r244589, r244571, r244590);
double r244592 = fma(r244591, r244571, r244579);
double r244593 = z;
double r244594 = fma(r244571, r244592, r244593);
double r244595 = r244587 * r244594;
double r244596 = 43.3400022514;
double r244597 = r244571 + r244596;
double r244598 = 263.505074721;
double r244599 = fma(r244597, r244571, r244598);
double r244600 = 313.399215894;
double r244601 = fma(r244599, r244571, r244600);
double r244602 = 47.066876606;
double r244603 = fma(r244601, r244571, r244602);
double r244604 = r244595 / r244603;
double r244605 = r244577 ? r244585 : r244604;
return r244605;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 27.1 |
|---|---|
| Target | 0.6 |
| Herbie | 1.0 |
if x < -1.4572255947977734e+19 or 3.6858491050624058e+31 < x Initial program 57.9
Simplified53.5
Taylor expanded around inf 1.8
Simplified1.8
if -1.4572255947977734e+19 < x < 3.6858491050624058e+31Initial program 0.4
Simplified0.4
rmApplied associate-/r/0.6
rmApplied associate-*l/0.4
Simplified0.4
Final simplification1.0
herbie shell --seed 2019199 +o rules:numerics
(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)))