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 -505680.708675332775 \lor \neg \left(z \le 0.442681492773434881\right):\\
\;\;\;\;x + \left(0.0692910599291888946 \cdot y + \frac{y}{z} \cdot \left(0.07512208616047561 - \frac{0.404622038699921249}{z}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;x + y \cdot \frac{\left(z \cdot 0.0692910599291888946 + 0.49173176105059679\right) \cdot z + 0.279195317918524977}{\left(z + 6.0124592597641033\right) \cdot z + 3.35034381502230394}\\
\end{array}double f(double x, double y, double z) {
double r634607 = x;
double r634608 = y;
double r634609 = z;
double r634610 = 0.0692910599291889;
double r634611 = r634609 * r634610;
double r634612 = 0.4917317610505968;
double r634613 = r634611 + r634612;
double r634614 = r634613 * r634609;
double r634615 = 0.279195317918525;
double r634616 = r634614 + r634615;
double r634617 = r634608 * r634616;
double r634618 = 6.012459259764103;
double r634619 = r634609 + r634618;
double r634620 = r634619 * r634609;
double r634621 = 3.350343815022304;
double r634622 = r634620 + r634621;
double r634623 = r634617 / r634622;
double r634624 = r634607 + r634623;
return r634624;
}
double f(double x, double y, double z) {
double r634625 = z;
double r634626 = -505680.7086753328;
bool r634627 = r634625 <= r634626;
double r634628 = 0.4426814927734349;
bool r634629 = r634625 <= r634628;
double r634630 = !r634629;
bool r634631 = r634627 || r634630;
double r634632 = x;
double r634633 = 0.0692910599291889;
double r634634 = y;
double r634635 = r634633 * r634634;
double r634636 = r634634 / r634625;
double r634637 = 0.07512208616047561;
double r634638 = 0.40462203869992125;
double r634639 = r634638 / r634625;
double r634640 = r634637 - r634639;
double r634641 = r634636 * r634640;
double r634642 = r634635 + r634641;
double r634643 = r634632 + r634642;
double r634644 = r634625 * r634633;
double r634645 = 0.4917317610505968;
double r634646 = r634644 + r634645;
double r634647 = r634646 * r634625;
double r634648 = 0.279195317918525;
double r634649 = r634647 + r634648;
double r634650 = 6.012459259764103;
double r634651 = r634625 + r634650;
double r634652 = r634651 * r634625;
double r634653 = 3.350343815022304;
double r634654 = r634652 + r634653;
double r634655 = r634649 / r634654;
double r634656 = r634634 * r634655;
double r634657 = r634632 + r634656;
double r634658 = r634631 ? r634643 : r634657;
return r634658;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 20.3 |
|---|---|
| Target | 0.2 |
| Herbie | 0.2 |
if z < -505680.7086753328 or 0.4426814927734349 < z Initial program 40.3
rmApplied *-un-lft-identity40.3
Applied times-frac32.8
Simplified32.8
Taylor expanded around inf 0.2
Simplified0.2
if -505680.7086753328 < z < 0.4426814927734349Initial program 0.1
rmApplied *-un-lft-identity0.1
Applied times-frac0.1
Simplified0.1
Final simplification0.2
herbie shell --seed 2020042
(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))))