\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z}\begin{array}{l}
\mathbf{if}\;z \le -2.001862668948682683719019062200331892161 \cdot 10^{54}:\\
\;\;\;\;\frac{x}{\frac{z}{\left(y - z\right) + 1}}\\
\mathbf{elif}\;z \le 1900831.650325161404907703399658203125:\\
\;\;\;\;\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{\frac{z}{\left(y - z\right) + 1}}\\
\end{array}double f(double x, double y, double z) {
double r30392320 = x;
double r30392321 = y;
double r30392322 = z;
double r30392323 = r30392321 - r30392322;
double r30392324 = 1.0;
double r30392325 = r30392323 + r30392324;
double r30392326 = r30392320 * r30392325;
double r30392327 = r30392326 / r30392322;
return r30392327;
}
double f(double x, double y, double z) {
double r30392328 = z;
double r30392329 = -2.0018626689486827e+54;
bool r30392330 = r30392328 <= r30392329;
double r30392331 = x;
double r30392332 = y;
double r30392333 = r30392332 - r30392328;
double r30392334 = 1.0;
double r30392335 = r30392333 + r30392334;
double r30392336 = r30392328 / r30392335;
double r30392337 = r30392331 / r30392336;
double r30392338 = 1900831.6503251614;
bool r30392339 = r30392328 <= r30392338;
double r30392340 = r30392331 * r30392335;
double r30392341 = r30392340 / r30392328;
double r30392342 = r30392339 ? r30392341 : r30392337;
double r30392343 = r30392330 ? r30392337 : r30392342;
return r30392343;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 10.5 |
|---|---|
| Target | 0.5 |
| Herbie | 0.2 |
if z < -2.0018626689486827e+54 or 1900831.6503251614 < z Initial program 18.4
rmApplied associate-/l*0.1
if -2.0018626689486827e+54 < z < 1900831.6503251614Initial program 0.5
Final simplification0.2
herbie shell --seed 2019174
(FPCore (x y z)
:name "Diagrams.TwoD.Segment.Bernstein:evaluateBernstein from diagrams-lib-1.3.0.3"
:herbie-target
(if (< x -2.71483106713436e-162) (- (* (+ 1.0 y) (/ x z)) x) (if (< x 3.874108816439546e-197) (* (* x (+ (- y z) 1.0)) (/ 1.0 z)) (- (* (+ 1.0 y) (/ x z)) x)))
(/ (* x (+ (- y z) 1.0)) z))