\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z}\begin{array}{l}
\mathbf{if}\;z \le -159.566156241908544:\\
\;\;\;\;\frac{x}{\frac{-z}{-\left(\left(y - z\right) + 1\right)}}\\
\mathbf{elif}\;z \le 8.26470253112780802 \cdot 10^{-8}:\\
\;\;\;\;\frac{x}{z} \cdot \left(\left(y - z\right) + 1\right)\\
\mathbf{else}:\\
\;\;\;\;x \cdot \frac{\left(y - z\right) + 1}{z}\\
\end{array}double f(double x, double y, double z) {
double r664174 = x;
double r664175 = y;
double r664176 = z;
double r664177 = r664175 - r664176;
double r664178 = 1.0;
double r664179 = r664177 + r664178;
double r664180 = r664174 * r664179;
double r664181 = r664180 / r664176;
return r664181;
}
double f(double x, double y, double z) {
double r664182 = z;
double r664183 = -159.56615624190854;
bool r664184 = r664182 <= r664183;
double r664185 = x;
double r664186 = -r664182;
double r664187 = y;
double r664188 = r664187 - r664182;
double r664189 = 1.0;
double r664190 = r664188 + r664189;
double r664191 = -r664190;
double r664192 = r664186 / r664191;
double r664193 = r664185 / r664192;
double r664194 = 8.264702531127808e-08;
bool r664195 = r664182 <= r664194;
double r664196 = r664185 / r664182;
double r664197 = r664196 * r664190;
double r664198 = r664190 / r664182;
double r664199 = r664185 * r664198;
double r664200 = r664195 ? r664197 : r664199;
double r664201 = r664184 ? r664193 : r664200;
return r664201;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 10.3 |
|---|---|
| Target | 0.4 |
| Herbie | 0.1 |
if z < -159.56615624190854Initial program 17.1
rmApplied associate-/l*0.1
rmApplied frac-2neg0.1
if -159.56615624190854 < z < 8.264702531127808e-08Initial program 0.1
rmApplied associate-/l*8.5
rmApplied associate-/r/0.1
if 8.264702531127808e-08 < z Initial program 16.3
rmApplied *-un-lft-identity16.3
Applied times-frac0.1
Simplified0.1
Final simplification0.1
herbie shell --seed 2020060
(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))