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 -6.2676172898621406 \cdot 10^{53} \lor \neg \left(z \le 4.46938865292930797 \cdot 10^{-7}\right):\\
\;\;\;\;x + y \cdot \left(\left(0.07512208616047561 \cdot \frac{1}{z} + 0.0692910599291888946\right) - 0.404622038699921249 \cdot \frac{1}{{z}^{2}}\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 r289035 = x;
double r289036 = y;
double r289037 = z;
double r289038 = 0.0692910599291889;
double r289039 = r289037 * r289038;
double r289040 = 0.4917317610505968;
double r289041 = r289039 + r289040;
double r289042 = r289041 * r289037;
double r289043 = 0.279195317918525;
double r289044 = r289042 + r289043;
double r289045 = r289036 * r289044;
double r289046 = 6.012459259764103;
double r289047 = r289037 + r289046;
double r289048 = r289047 * r289037;
double r289049 = 3.350343815022304;
double r289050 = r289048 + r289049;
double r289051 = r289045 / r289050;
double r289052 = r289035 + r289051;
return r289052;
}
double f(double x, double y, double z) {
double r289053 = z;
double r289054 = -6.267617289862141e+53;
bool r289055 = r289053 <= r289054;
double r289056 = 4.469388652929308e-07;
bool r289057 = r289053 <= r289056;
double r289058 = !r289057;
bool r289059 = r289055 || r289058;
double r289060 = x;
double r289061 = y;
double r289062 = 0.07512208616047561;
double r289063 = 1.0;
double r289064 = r289063 / r289053;
double r289065 = r289062 * r289064;
double r289066 = 0.0692910599291889;
double r289067 = r289065 + r289066;
double r289068 = 0.40462203869992125;
double r289069 = 2.0;
double r289070 = pow(r289053, r289069);
double r289071 = r289063 / r289070;
double r289072 = r289068 * r289071;
double r289073 = r289067 - r289072;
double r289074 = r289061 * r289073;
double r289075 = r289060 + r289074;
double r289076 = r289053 * r289066;
double r289077 = 0.4917317610505968;
double r289078 = r289076 + r289077;
double r289079 = r289078 * r289053;
double r289080 = 0.279195317918525;
double r289081 = r289079 + r289080;
double r289082 = 6.012459259764103;
double r289083 = r289053 + r289082;
double r289084 = r289083 * r289053;
double r289085 = 3.350343815022304;
double r289086 = r289084 + r289085;
double r289087 = r289081 / r289086;
double r289088 = r289061 * r289087;
double r289089 = r289060 + r289088;
double r289090 = r289059 ? r289075 : r289089;
return r289090;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 19.7 |
|---|---|
| Target | 0.2 |
| Herbie | 0.3 |
if z < -6.267617289862141e+53 or 4.469388652929308e-07 < z Initial program 42.7
rmApplied *-un-lft-identity42.7
Applied times-frac34.5
Simplified34.5
Taylor expanded around inf 0.6
if -6.267617289862141e+53 < z < 4.469388652929308e-07Initial program 0.5
rmApplied *-un-lft-identity0.5
Applied times-frac0.1
Simplified0.1
Final simplification0.3
herbie shell --seed 2020062
(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))))