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 -3.344449140814709812702451729857916650488 \cdot 10^{51} \lor \neg \left(z \le 8549728.21505705825984477996826171875\right):\\
\;\;\;\;x + y \cdot \frac{1}{\left(14.43187621926893804413793986896052956581 - 15.64635683029203505611803848296403884888 \cdot \frac{1}{z}\right) + \frac{\frac{101.237333520038163214849191717803478241}{z}}{z}}\\
\mathbf{else}:\\
\;\;\;\;x + y \cdot \frac{\left(z \cdot 0.06929105992918889456166908757950295694172 + 0.4917317610505967939715787906607147306204\right) \cdot z + 0.2791953179185249767080279070796677842736}{\left(z + 6.012459259764103336465268512256443500519\right) \cdot z + 3.350343815022303939343828460550867021084}\\
\end{array}double f(double x, double y, double z) {
double r256350 = x;
double r256351 = y;
double r256352 = z;
double r256353 = 0.0692910599291889;
double r256354 = r256352 * r256353;
double r256355 = 0.4917317610505968;
double r256356 = r256354 + r256355;
double r256357 = r256356 * r256352;
double r256358 = 0.279195317918525;
double r256359 = r256357 + r256358;
double r256360 = r256351 * r256359;
double r256361 = 6.012459259764103;
double r256362 = r256352 + r256361;
double r256363 = r256362 * r256352;
double r256364 = 3.350343815022304;
double r256365 = r256363 + r256364;
double r256366 = r256360 / r256365;
double r256367 = r256350 + r256366;
return r256367;
}
double f(double x, double y, double z) {
double r256368 = z;
double r256369 = -3.34444914081471e+51;
bool r256370 = r256368 <= r256369;
double r256371 = 8549728.215057058;
bool r256372 = r256368 <= r256371;
double r256373 = !r256372;
bool r256374 = r256370 || r256373;
double r256375 = x;
double r256376 = y;
double r256377 = 1.0;
double r256378 = 14.431876219268938;
double r256379 = 15.646356830292035;
double r256380 = r256377 / r256368;
double r256381 = r256379 * r256380;
double r256382 = r256378 - r256381;
double r256383 = 101.23733352003816;
double r256384 = r256383 / r256368;
double r256385 = r256384 / r256368;
double r256386 = r256382 + r256385;
double r256387 = r256377 / r256386;
double r256388 = r256376 * r256387;
double r256389 = r256375 + r256388;
double r256390 = 0.0692910599291889;
double r256391 = r256368 * r256390;
double r256392 = 0.4917317610505968;
double r256393 = r256391 + r256392;
double r256394 = r256393 * r256368;
double r256395 = 0.279195317918525;
double r256396 = r256394 + r256395;
double r256397 = 6.012459259764103;
double r256398 = r256368 + r256397;
double r256399 = r256398 * r256368;
double r256400 = 3.350343815022304;
double r256401 = r256399 + r256400;
double r256402 = r256396 / r256401;
double r256403 = r256376 * r256402;
double r256404 = r256375 + r256403;
double r256405 = r256374 ? r256389 : r256404;
return r256405;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 20.1 |
|---|---|
| Target | 0.2 |
| Herbie | 0.1 |
if z < -3.34444914081471e+51 or 8549728.215057058 < z Initial program 43.7
rmApplied associate-/l*34.9
Taylor expanded around inf 0.1
Simplified0.1
rmApplied div-inv0.0
if -3.34444914081471e+51 < z < 8549728.215057058Initial program 0.5
rmApplied *-un-lft-identity0.5
Applied times-frac0.1
Simplified0.1
Final simplification0.1
herbie shell --seed 1978988140
(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))))