x + \frac{y \cdot \left(\left(z \cdot 0.06929105992918889456166908757950295694172 + 0.4917317610505967939715787906607147306204\right) \cdot z + 0.2791953179185249767080279070796677842736\right)}{\left(z + 6.012459259764103336465268512256443500519\right) \cdot z + 3.350343815022303939343828460550867021084}\begin{array}{l}
\mathbf{if}\;z \le -3587256939215504896 \lor \neg \left(z \le 510884.7615578636177815496921539306640625\right):\\
\;\;\;\;x + \left(\left(0.07512208616047560960637952121032867580652 \cdot \frac{y}{z} + 0.06929105992918889456166908757950295694172 \cdot y\right) - 0.4046220386999212492717958866705885156989 \cdot \frac{y}{{z}^{2}}\right)\\
\mathbf{else}:\\
\;\;\;\;x + \frac{y}{\sqrt{\left(z + 6.012459259764103336465268512256443500519\right) \cdot z + 3.350343815022303939343828460550867021084}} \cdot \frac{\left(z \cdot 0.06929105992918889456166908757950295694172 + 0.4917317610505967939715787906607147306204\right) \cdot z + 0.2791953179185249767080279070796677842736}{\sqrt{\left(z + 6.012459259764103336465268512256443500519\right) \cdot z + 3.350343815022303939343828460550867021084}}\\
\end{array}double f(double x, double y, double z) {
double r257270 = x;
double r257271 = y;
double r257272 = z;
double r257273 = 0.0692910599291889;
double r257274 = r257272 * r257273;
double r257275 = 0.4917317610505968;
double r257276 = r257274 + r257275;
double r257277 = r257276 * r257272;
double r257278 = 0.279195317918525;
double r257279 = r257277 + r257278;
double r257280 = r257271 * r257279;
double r257281 = 6.012459259764103;
double r257282 = r257272 + r257281;
double r257283 = r257282 * r257272;
double r257284 = 3.350343815022304;
double r257285 = r257283 + r257284;
double r257286 = r257280 / r257285;
double r257287 = r257270 + r257286;
return r257287;
}
double f(double x, double y, double z) {
double r257288 = z;
double r257289 = -3.587256939215505e+18;
bool r257290 = r257288 <= r257289;
double r257291 = 510884.7615578636;
bool r257292 = r257288 <= r257291;
double r257293 = !r257292;
bool r257294 = r257290 || r257293;
double r257295 = x;
double r257296 = 0.07512208616047561;
double r257297 = y;
double r257298 = r257297 / r257288;
double r257299 = r257296 * r257298;
double r257300 = 0.0692910599291889;
double r257301 = r257300 * r257297;
double r257302 = r257299 + r257301;
double r257303 = 0.40462203869992125;
double r257304 = 2.0;
double r257305 = pow(r257288, r257304);
double r257306 = r257297 / r257305;
double r257307 = r257303 * r257306;
double r257308 = r257302 - r257307;
double r257309 = r257295 + r257308;
double r257310 = 6.012459259764103;
double r257311 = r257288 + r257310;
double r257312 = r257311 * r257288;
double r257313 = 3.350343815022304;
double r257314 = r257312 + r257313;
double r257315 = sqrt(r257314);
double r257316 = r257297 / r257315;
double r257317 = r257288 * r257300;
double r257318 = 0.4917317610505968;
double r257319 = r257317 + r257318;
double r257320 = r257319 * r257288;
double r257321 = 0.279195317918525;
double r257322 = r257320 + r257321;
double r257323 = r257322 / r257315;
double r257324 = r257316 * r257323;
double r257325 = r257295 + r257324;
double r257326 = r257294 ? r257309 : r257325;
return r257326;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 20.2 |
|---|---|
| Target | 0.2 |
| Herbie | 0.2 |
if z < -3.587256939215505e+18 or 510884.7615578636 < z Initial program 41.4
Taylor expanded around inf 0.0
if -3.587256939215505e+18 < z < 510884.7615578636Initial program 0.2
rmApplied add-sqr-sqrt0.6
Applied times-frac0.3
Final simplification0.2
herbie shell --seed 2019308
(FPCore (x y z)
:name "Numeric.SpecFunctions:logGamma from math-functions-0.1.5.2, B"
:precision binary64
:herbie-target
(if (< z -8120153.6524566747) (- (* (+ (/ 0.07512208616047561 z) 0.0692910599291888946) y) (- (/ (* 0.404622038699921249 y) (* z z)) x)) (if (< z 657611897278737680000) (+ x (* (* y (+ (* (+ (* z 0.0692910599291888946) 0.49173176105059679) z) 0.279195317918524977)) (/ 1 (+ (* (+ z 6.0124592597641033) z) 3.35034381502230394)))) (- (* (+ (/ 0.07512208616047561 z) 0.0692910599291888946) y) (- (/ (* 0.404622038699921249 y) (* z z)) x))))
(+ x (/ (* y (+ (* (+ (* z 0.0692910599291888946) 0.49173176105059679) z) 0.279195317918524977)) (+ (* (+ z 6.0124592597641033) z) 3.35034381502230394))))