\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z}\begin{array}{l}
\mathbf{if}\;z \le -395330988786.383362 \lor \neg \left(z \le 6.8158029305576074 \cdot 10^{-126}\right):\\
\;\;\;\;\frac{x}{\frac{z}{\left(y - z\right) + 1}}\\
\mathbf{else}:\\
\;\;\;\;\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z}\\
\end{array}double f(double x, double y, double z) {
double r502218 = x;
double r502219 = y;
double r502220 = z;
double r502221 = r502219 - r502220;
double r502222 = 1.0;
double r502223 = r502221 + r502222;
double r502224 = r502218 * r502223;
double r502225 = r502224 / r502220;
return r502225;
}
double f(double x, double y, double z) {
double r502226 = z;
double r502227 = -395330988786.38336;
bool r502228 = r502226 <= r502227;
double r502229 = 6.815802930557607e-126;
bool r502230 = r502226 <= r502229;
double r502231 = !r502230;
bool r502232 = r502228 || r502231;
double r502233 = x;
double r502234 = y;
double r502235 = r502234 - r502226;
double r502236 = 1.0;
double r502237 = r502235 + r502236;
double r502238 = r502226 / r502237;
double r502239 = r502233 / r502238;
double r502240 = r502233 * r502237;
double r502241 = r502240 / r502226;
double r502242 = r502232 ? r502239 : r502241;
return r502242;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 10.2 |
|---|---|
| Target | 0.5 |
| Herbie | 0.4 |
if z < -395330988786.38336 or 6.815802930557607e-126 < z Initial program 14.7
rmApplied associate-/l*0.5
if -395330988786.38336 < z < 6.815802930557607e-126Initial program 0.1
Final simplification0.4
herbie shell --seed 2019199
(FPCore (x y z)
:name "Diagrams.TwoD.Segment.Bernstein:evaluateBernstein from diagrams-lib-1.3.0.3"
:herbie-target
(if (< x -2.71483106713436e-162) (- (* (+ 1.0 y) (/ x z)) x) (if (< x 3.874108816439546e-197) (* (* x (+ (- y z) 1.0)) (/ 1.0 z)) (- (* (+ 1.0 y) (/ x z)) x)))
(/ (* x (+ (- y z) 1.0)) z))