x + \frac{y \cdot \left(\left(z \cdot 0.0692910599291888946 + 0.49173176105059679\right) \cdot z + 0.279195317918524977\right)}{\left(z + 6.0124592597641033\right) \cdot z + 3.35034381502230394}\begin{array}{l}
\mathbf{if}\;z \le -31.3780939790472395 \lor \neg \left(z \le 1.075597970485127 \cdot 10^{-7}\right):\\
\;\;\;\;x + \left(0.07512208616047561 \cdot \frac{y}{z} + 0.0692910599291888946 \cdot y\right)\\
\mathbf{else}:\\
\;\;\;\;x + \left(y \cdot \left(0.083333333333333232 - 0.002777777777517226 \cdot z\right) + 7.936505811533753 \cdot 10^{-4} \cdot \left({z}^{2} \cdot y\right)\right)\\
\end{array}double f(double x, double y, double z) {
double r418567 = x;
double r418568 = y;
double r418569 = z;
double r418570 = 0.0692910599291889;
double r418571 = r418569 * r418570;
double r418572 = 0.4917317610505968;
double r418573 = r418571 + r418572;
double r418574 = r418573 * r418569;
double r418575 = 0.279195317918525;
double r418576 = r418574 + r418575;
double r418577 = r418568 * r418576;
double r418578 = 6.012459259764103;
double r418579 = r418569 + r418578;
double r418580 = r418579 * r418569;
double r418581 = 3.350343815022304;
double r418582 = r418580 + r418581;
double r418583 = r418577 / r418582;
double r418584 = r418567 + r418583;
return r418584;
}
double f(double x, double y, double z) {
double r418585 = z;
double r418586 = -31.37809397904724;
bool r418587 = r418585 <= r418586;
double r418588 = 1.075597970485127e-07;
bool r418589 = r418585 <= r418588;
double r418590 = !r418589;
bool r418591 = r418587 || r418590;
double r418592 = x;
double r418593 = 0.07512208616047561;
double r418594 = y;
double r418595 = r418594 / r418585;
double r418596 = r418593 * r418595;
double r418597 = 0.0692910599291889;
double r418598 = r418597 * r418594;
double r418599 = r418596 + r418598;
double r418600 = r418592 + r418599;
double r418601 = 0.08333333333333323;
double r418602 = 0.0027777777775172263;
double r418603 = r418602 * r418585;
double r418604 = r418601 - r418603;
double r418605 = r418594 * r418604;
double r418606 = 0.0007936505811533753;
double r418607 = 2.0;
double r418608 = pow(r418585, r418607);
double r418609 = r418608 * r418594;
double r418610 = r418606 * r418609;
double r418611 = r418605 + r418610;
double r418612 = r418592 + r418611;
double r418613 = r418591 ? r418600 : r418612;
return r418613;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 20.0 |
|---|---|
| Target | 0.2 |
| Herbie | 0.5 |
if z < -31.37809397904724 or 1.075597970485127e-07 < z Initial program 39.4
Taylor expanded around inf 0.7
if -31.37809397904724 < z < 1.075597970485127e-07Initial program 0.1
rmApplied associate-/l*0.2
Taylor expanded around 0 0.3
Simplified0.3
Final simplification0.5
herbie shell --seed 2020060
(FPCore (x y z)
:name "Numeric.SpecFunctions:logGamma from math-functions-0.1.5.2, B"
:precision binary64
:herbie-target
(if (< z -8120153.652456675) (- (* (+ (/ 0.07512208616047561 z) 0.0692910599291889) y) (- (/ (* 0.40462203869992125 y) (* z z)) x)) (if (< z 657611897278737680000) (+ x (* (* y (+ (* (+ (* z 0.0692910599291889) 0.4917317610505968) z) 0.279195317918525)) (/ 1 (+ (* (+ z 6.012459259764103) z) 3.350343815022304)))) (- (* (+ (/ 0.07512208616047561 z) 0.0692910599291889) y) (- (/ (* 0.40462203869992125 y) (* z z)) x))))
(+ x (/ (* y (+ (* (+ (* z 0.0692910599291889) 0.4917317610505968) z) 0.279195317918525)) (+ (* (+ z 6.012459259764103) z) 3.350343815022304))))