\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z}\begin{array}{l}
\mathbf{if}\;x \le -1.4723758122722615 \cdot 10^{110} \lor \neg \left(x \le 1.8053743254521745 \cdot 10^{-20}\right):\\
\;\;\;\;\frac{x}{\frac{z}{\left(y - z\right) + 1}}\\
\mathbf{else}:\\
\;\;\;\;\left(\frac{x \cdot y}{z} + 1 \cdot \frac{x}{z}\right) - x\\
\end{array}double f(double x, double y, double z) {
double r736947 = x;
double r736948 = y;
double r736949 = z;
double r736950 = r736948 - r736949;
double r736951 = 1.0;
double r736952 = r736950 + r736951;
double r736953 = r736947 * r736952;
double r736954 = r736953 / r736949;
return r736954;
}
double f(double x, double y, double z) {
double r736955 = x;
double r736956 = -1.4723758122722615e+110;
bool r736957 = r736955 <= r736956;
double r736958 = 1.8053743254521745e-20;
bool r736959 = r736955 <= r736958;
double r736960 = !r736959;
bool r736961 = r736957 || r736960;
double r736962 = z;
double r736963 = y;
double r736964 = r736963 - r736962;
double r736965 = 1.0;
double r736966 = r736964 + r736965;
double r736967 = r736962 / r736966;
double r736968 = r736955 / r736967;
double r736969 = r736955 * r736963;
double r736970 = r736969 / r736962;
double r736971 = r736955 / r736962;
double r736972 = r736965 * r736971;
double r736973 = r736970 + r736972;
double r736974 = r736973 - r736955;
double r736975 = r736961 ? r736968 : r736974;
return r736975;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 10.6 |
|---|---|
| Target | 0.4 |
| Herbie | 0.4 |
if x < -1.4723758122722615e+110 or 1.8053743254521745e-20 < x Initial program 29.4
rmApplied associate-/l*0.1
if -1.4723758122722615e+110 < x < 1.8053743254521745e-20Initial program 1.5
rmApplied associate-/l*4.4
Taylor expanded around 0 0.5
Final simplification0.4
herbie shell --seed 2020027
(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))