\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z}\begin{array}{l}
\mathbf{if}\;z \le -9.33691623494502822 \cdot 10^{51} \lor \neg \left(z \le 3.0566564905939977 \cdot 10^{-28}\right):\\
\;\;\;\;x \cdot \frac{1}{\frac{z}{\left(y - z\right) + 1}}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{z} \cdot \left(\left(y - z\right) + 1\right)\\
\end{array}double f(double x, double y, double z) {
double r728247 = x;
double r728248 = y;
double r728249 = z;
double r728250 = r728248 - r728249;
double r728251 = 1.0;
double r728252 = r728250 + r728251;
double r728253 = r728247 * r728252;
double r728254 = r728253 / r728249;
return r728254;
}
double f(double x, double y, double z) {
double r728255 = z;
double r728256 = -9.336916234945028e+51;
bool r728257 = r728255 <= r728256;
double r728258 = 3.0566564905939977e-28;
bool r728259 = r728255 <= r728258;
double r728260 = !r728259;
bool r728261 = r728257 || r728260;
double r728262 = x;
double r728263 = 1.0;
double r728264 = y;
double r728265 = r728264 - r728255;
double r728266 = 1.0;
double r728267 = r728265 + r728266;
double r728268 = r728255 / r728267;
double r728269 = r728263 / r728268;
double r728270 = r728262 * r728269;
double r728271 = r728262 / r728255;
double r728272 = r728271 * r728267;
double r728273 = r728261 ? r728270 : r728272;
return r728273;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 10.2 |
|---|---|
| Target | 0.4 |
| Herbie | 0.2 |
if z < -9.336916234945028e+51 or 3.0566564905939977e-28 < z Initial program 17.1
rmApplied associate-/l*0.1
rmApplied div-inv0.1
if -9.336916234945028e+51 < z < 3.0566564905939977e-28Initial program 0.4
rmApplied associate-/l*7.5
rmApplied associate-/r/0.4
Final simplification0.2
herbie shell --seed 2020021 +o rules:numerics
(FPCore (x y z)
:name "Diagrams.TwoD.Segment.Bernstein:evaluateBernstein from diagrams-lib-1.3.0.3"
:precision binary64
:herbie-target
(if (< x -2.71483106713436e-162) (- (* (+ 1 y) (/ x z)) x) (if (< x 3.874108816439546e-197) (* (* x (+ (- y z) 1)) (/ 1 z)) (- (* (+ 1 y) (/ x z)) x)))
(/ (* x (+ (- y z) 1)) z))