\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z}\begin{array}{l}
\mathbf{if}\;x \le -8953946801625355128083054592 \lor \neg \left(x \le 2.590538009135805678082833971438481635892 \cdot 10^{145}\right):\\
\;\;\;\;\frac{x}{z} \cdot \left(1 + y\right) - x\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(y + 1\right) \cdot x}{z} - x\\
\end{array}double f(double x, double y, double z) {
double r409612 = x;
double r409613 = y;
double r409614 = z;
double r409615 = r409613 - r409614;
double r409616 = 1.0;
double r409617 = r409615 + r409616;
double r409618 = r409612 * r409617;
double r409619 = r409618 / r409614;
return r409619;
}
double f(double x, double y, double z) {
double r409620 = x;
double r409621 = -8.953946801625355e+27;
bool r409622 = r409620 <= r409621;
double r409623 = 2.5905380091358057e+145;
bool r409624 = r409620 <= r409623;
double r409625 = !r409624;
bool r409626 = r409622 || r409625;
double r409627 = z;
double r409628 = r409620 / r409627;
double r409629 = 1.0;
double r409630 = y;
double r409631 = r409629 + r409630;
double r409632 = r409628 * r409631;
double r409633 = r409632 - r409620;
double r409634 = r409630 + r409629;
double r409635 = r409634 * r409620;
double r409636 = r409635 / r409627;
double r409637 = r409636 - r409620;
double r409638 = r409626 ? r409633 : r409637;
return r409638;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 10.3 |
|---|---|
| Target | 0.4 |
| Herbie | 0.5 |
if x < -8.953946801625355e+27 or 2.5905380091358057e+145 < x Initial program 33.9
Taylor expanded around 0 10.9
Simplified0.1
if -8.953946801625355e+27 < x < 2.5905380091358057e+145Initial program 2.2
Taylor expanded around 0 0.7
Simplified2.3
rmApplied associate-*l/0.7
Simplified0.7
Final simplification0.5
herbie shell --seed 2019323
(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))