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 -8.7686121240438417 \cdot 10^{45} \lor \neg \left(z \le 0.487999161623279887\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 r464255 = x;
double r464256 = y;
double r464257 = z;
double r464258 = 0.0692910599291889;
double r464259 = r464257 * r464258;
double r464260 = 0.4917317610505968;
double r464261 = r464259 + r464260;
double r464262 = r464261 * r464257;
double r464263 = 0.279195317918525;
double r464264 = r464262 + r464263;
double r464265 = r464256 * r464264;
double r464266 = 6.012459259764103;
double r464267 = r464257 + r464266;
double r464268 = r464267 * r464257;
double r464269 = 3.350343815022304;
double r464270 = r464268 + r464269;
double r464271 = r464265 / r464270;
double r464272 = r464255 + r464271;
return r464272;
}
double f(double x, double y, double z) {
double r464273 = z;
double r464274 = -8.768612124043842e+45;
bool r464275 = r464273 <= r464274;
double r464276 = 0.4879991616232799;
bool r464277 = r464273 <= r464276;
double r464278 = !r464277;
bool r464279 = r464275 || r464278;
double r464280 = x;
double r464281 = y;
double r464282 = 0.07512208616047561;
double r464283 = 1.0;
double r464284 = r464283 / r464273;
double r464285 = r464282 * r464284;
double r464286 = 0.0692910599291889;
double r464287 = r464285 + r464286;
double r464288 = 0.40462203869992125;
double r464289 = 2.0;
double r464290 = pow(r464273, r464289);
double r464291 = r464283 / r464290;
double r464292 = r464288 * r464291;
double r464293 = r464287 - r464292;
double r464294 = r464281 * r464293;
double r464295 = r464280 + r464294;
double r464296 = r464273 * r464286;
double r464297 = 0.4917317610505968;
double r464298 = r464296 + r464297;
double r464299 = r464298 * r464273;
double r464300 = 0.279195317918525;
double r464301 = r464299 + r464300;
double r464302 = 6.012459259764103;
double r464303 = r464273 + r464302;
double r464304 = r464303 * r464273;
double r464305 = 3.350343815022304;
double r464306 = r464304 + r464305;
double r464307 = r464301 / r464306;
double r464308 = r464281 * r464307;
double r464309 = r464280 + r464308;
double r464310 = r464279 ? r464295 : r464309;
return r464310;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 20.2 |
|---|---|
| Target | 0.2 |
| Herbie | 0.2 |
if z < -8.768612124043842e+45 or 0.4879991616232799 < z Initial program 42.9
rmApplied *-un-lft-identity42.9
Applied times-frac34.8
Simplified34.8
Taylor expanded around inf 0.2
if -8.768612124043842e+45 < z < 0.4879991616232799Initial program 0.5
rmApplied *-un-lft-identity0.5
Applied times-frac0.1
Simplified0.1
Final simplification0.2
herbie shell --seed 2020036
(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))))