\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z}\begin{array}{l}
\mathbf{if}\;x \le -8.34491040594951455 \cdot 10^{-75} \lor \neg \left(x \le 2.24523695161930029 \cdot 10^{-86}\right):\\
\;\;\;\;\frac{x}{z} \cdot \left(\left(y - z\right) + 1\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z}\\
\end{array}double f(double x, double y, double z) {
double r778829 = x;
double r778830 = y;
double r778831 = z;
double r778832 = r778830 - r778831;
double r778833 = 1.0;
double r778834 = r778832 + r778833;
double r778835 = r778829 * r778834;
double r778836 = r778835 / r778831;
return r778836;
}
double f(double x, double y, double z) {
double r778837 = x;
double r778838 = -8.344910405949515e-75;
bool r778839 = r778837 <= r778838;
double r778840 = 2.2452369516193003e-86;
bool r778841 = r778837 <= r778840;
double r778842 = !r778841;
bool r778843 = r778839 || r778842;
double r778844 = z;
double r778845 = r778837 / r778844;
double r778846 = y;
double r778847 = r778846 - r778844;
double r778848 = 1.0;
double r778849 = r778847 + r778848;
double r778850 = r778845 * r778849;
double r778851 = r778837 * r778849;
double r778852 = r778851 / r778844;
double r778853 = r778843 ? r778850 : r778852;
return r778853;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 9.8 |
|---|---|
| Target | 0.4 |
| Herbie | 0.7 |
if x < -8.344910405949515e-75 or 2.2452369516193003e-86 < x Initial program 17.9
rmApplied associate-/l*0.4
rmApplied associate-/r/1.2
if -8.344910405949515e-75 < x < 2.2452369516193003e-86Initial program 0.2
Final simplification0.7
herbie shell --seed 2020045
(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))