\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z}\begin{array}{l}
\mathbf{if}\;z \le -1.03093838410670302 \cdot 10^{-10}:\\
\;\;\;\;\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 r673913 = x;
double r673914 = y;
double r673915 = z;
double r673916 = r673914 - r673915;
double r673917 = 1.0;
double r673918 = r673916 + r673917;
double r673919 = r673913 * r673918;
double r673920 = r673919 / r673915;
return r673920;
}
double f(double x, double y, double z) {
double r673921 = z;
double r673922 = -1.030938384106703e-10;
bool r673923 = r673921 <= r673922;
double r673924 = x;
double r673925 = y;
double r673926 = r673925 - r673921;
double r673927 = 1.0;
double r673928 = r673926 + r673927;
double r673929 = r673921 / r673928;
double r673930 = r673924 / r673929;
double r673931 = r673924 * r673925;
double r673932 = r673931 / r673921;
double r673933 = r673924 / r673921;
double r673934 = r673927 * r673933;
double r673935 = r673932 + r673934;
double r673936 = r673935 - r673924;
double r673937 = r673923 ? r673930 : r673936;
return r673937;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 10.4 |
|---|---|
| Target | 0.4 |
| Herbie | 1.9 |
if z < -1.030938384106703e-10Initial program 16.6
rmApplied associate-/l*0.1
if -1.030938384106703e-10 < z Initial program 7.5
rmApplied *-un-lft-identity7.5
Applied times-frac5.0
Simplified5.0
Taylor expanded around 0 2.7
Final simplification1.9
herbie shell --seed 2020036
(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))