\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z}\begin{array}{l}
\mathbf{if}\;x \le 1.512135366082805601804874055418816683336 \cdot 10^{-70}:\\
\;\;\;\;\left(\frac{1}{\frac{z}{x \cdot y}} + 1 \cdot \frac{x}{z}\right) - x\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{z} \cdot \left(1 + y\right) - x\\
\end{array}double f(double x, double y, double z) {
double r601507 = x;
double r601508 = y;
double r601509 = z;
double r601510 = r601508 - r601509;
double r601511 = 1.0;
double r601512 = r601510 + r601511;
double r601513 = r601507 * r601512;
double r601514 = r601513 / r601509;
return r601514;
}
double f(double x, double y, double z) {
double r601515 = x;
double r601516 = 1.5121353660828056e-70;
bool r601517 = r601515 <= r601516;
double r601518 = 1.0;
double r601519 = z;
double r601520 = y;
double r601521 = r601515 * r601520;
double r601522 = r601519 / r601521;
double r601523 = r601518 / r601522;
double r601524 = 1.0;
double r601525 = r601515 / r601519;
double r601526 = r601524 * r601525;
double r601527 = r601523 + r601526;
double r601528 = r601527 - r601515;
double r601529 = r601524 + r601520;
double r601530 = r601525 * r601529;
double r601531 = r601530 - r601515;
double r601532 = r601517 ? r601528 : r601531;
return r601532;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 10.4 |
|---|---|
| Target | 0.4 |
| Herbie | 1.9 |
if x < 1.5121353660828056e-70Initial program 7.1
rmApplied associate-/l*4.4
Taylor expanded around 0 2.4
rmApplied clear-num2.5
if 1.5121353660828056e-70 < x Initial program 19.5
rmApplied associate-/l*0.4
Taylor expanded around 0 6.2
Taylor expanded around 0 6.2
Simplified0.1
Final simplification1.9
herbie shell --seed 2019322
(FPCore (x y z)
:name "Diagrams.TwoD.Segment.Bernstein:evaluateBernstein from diagrams-lib-1.3.0.3"
:precision binary64
:herbie-target
(if (< x -2.7148310671343599e-162) (- (* (+ 1 y) (/ x z)) x) (if (< x 3.87410881643954616e-197) (* (* x (+ (- y z) 1)) (/ 1 z)) (- (* (+ 1 y) (/ x z)) x)))
(/ (* x (+ (- y z) 1)) z))