\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z}\begin{array}{l}
\mathbf{if}\;z \le -1.314996886140635 \cdot 10^{74}:\\
\;\;\;\;\frac{x}{\frac{z}{\left(y - z\right) + 1}}\\
\mathbf{elif}\;z \le 251316865962609.19:\\
\;\;\;\;\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z}\\
\mathbf{else}:\\
\;\;\;\;x \cdot \frac{\left(y - z\right) + 1}{z}\\
\end{array}double f(double x, double y, double z) {
double r629894 = x;
double r629895 = y;
double r629896 = z;
double r629897 = r629895 - r629896;
double r629898 = 1.0;
double r629899 = r629897 + r629898;
double r629900 = r629894 * r629899;
double r629901 = r629900 / r629896;
return r629901;
}
double f(double x, double y, double z) {
double r629902 = z;
double r629903 = -1.314996886140635e+74;
bool r629904 = r629902 <= r629903;
double r629905 = x;
double r629906 = y;
double r629907 = r629906 - r629902;
double r629908 = 1.0;
double r629909 = r629907 + r629908;
double r629910 = r629902 / r629909;
double r629911 = r629905 / r629910;
double r629912 = 251316865962609.2;
bool r629913 = r629902 <= r629912;
double r629914 = r629905 * r629909;
double r629915 = r629914 / r629902;
double r629916 = r629909 / r629902;
double r629917 = r629905 * r629916;
double r629918 = r629913 ? r629915 : r629917;
double r629919 = r629904 ? r629911 : r629918;
return r629919;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 10.2 |
|---|---|
| Target | 0.4 |
| Herbie | 0.4 |
if z < -1.314996886140635e+74Initial program 20.3
rmApplied associate-/l*0.1
if -1.314996886140635e+74 < z < 251316865962609.2Initial program 0.8
if 251316865962609.2 < z Initial program 17.5
rmApplied *-un-lft-identity17.5
Applied times-frac0.1
Simplified0.1
Final simplification0.4
herbie shell --seed 2020100 +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))