\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 r648451 = x;
double r648452 = y;
double r648453 = z;
double r648454 = r648452 - r648453;
double r648455 = 1.0;
double r648456 = r648454 + r648455;
double r648457 = r648451 * r648456;
double r648458 = r648457 / r648453;
return r648458;
}
double f(double x, double y, double z) {
double r648459 = z;
double r648460 = -9.336916234945028e+51;
bool r648461 = r648459 <= r648460;
double r648462 = 3.0566564905939977e-28;
bool r648463 = r648459 <= r648462;
double r648464 = !r648463;
bool r648465 = r648461 || r648464;
double r648466 = x;
double r648467 = 1.0;
double r648468 = y;
double r648469 = r648468 - r648459;
double r648470 = 1.0;
double r648471 = r648469 + r648470;
double r648472 = r648459 / r648471;
double r648473 = r648467 / r648472;
double r648474 = r648466 * r648473;
double r648475 = r648466 / r648459;
double r648476 = r648475 * r648471;
double r648477 = r648465 ? r648474 : r648476;
return r648477;
}




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 *-un-lft-identity17.1
Applied times-frac0.1
Simplified0.1
rmApplied clear-num0.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
(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))