\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z}\begin{array}{l}
\mathbf{if}\;z \le -6.231177025534271 \cdot 10^{38} \lor \neg \left(z \le 1.30166855464399448 \cdot 10^{-27}\right):\\
\;\;\;\;x \cdot \frac{\left(y - z\right) + 1}{z}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{z} \cdot \left(\left(y - z\right) + 1\right)\\
\end{array}double f(double x, double y, double z) {
double r673880 = x;
double r673881 = y;
double r673882 = z;
double r673883 = r673881 - r673882;
double r673884 = 1.0;
double r673885 = r673883 + r673884;
double r673886 = r673880 * r673885;
double r673887 = r673886 / r673882;
return r673887;
}
double f(double x, double y, double z) {
double r673888 = z;
double r673889 = -6.231177025534271e+38;
bool r673890 = r673888 <= r673889;
double r673891 = 1.3016685546439945e-27;
bool r673892 = r673888 <= r673891;
double r673893 = !r673892;
bool r673894 = r673890 || r673893;
double r673895 = x;
double r673896 = y;
double r673897 = r673896 - r673888;
double r673898 = 1.0;
double r673899 = r673897 + r673898;
double r673900 = r673899 / r673888;
double r673901 = r673895 * r673900;
double r673902 = r673895 / r673888;
double r673903 = r673902 * r673899;
double r673904 = r673894 ? r673901 : r673903;
return r673904;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 10.6 |
|---|---|
| Target | 0.4 |
| Herbie | 0.2 |
if z < -6.231177025534271e+38 or 1.3016685546439945e-27 < z Initial program 17.9
rmApplied *-un-lft-identity17.9
Applied times-frac0.1
Simplified0.1
if -6.231177025534271e+38 < z < 1.3016685546439945e-27Initial program 0.2
rmApplied associate-/l*7.2
rmApplied associate-/r/0.2
Final simplification0.2
herbie shell --seed 2020047
(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))