\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z}\begin{array}{l}
\mathbf{if}\;x \le -3.4374981009777875 \cdot 10^{27}:\\
\;\;\;\;\frac{x}{z} \cdot \left(1 + y\right) - x\\
\mathbf{elif}\;x \le 8.649219799147649 \cdot 10^{-36}:\\
\;\;\;\;\mathsf{fma}\left(1, \frac{x}{z}, \left(x \cdot y\right) \cdot \frac{1}{z}\right) - x\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{\frac{z}{\left(y - z\right) + 1}}\\
\end{array}double f(double x, double y, double z) {
double r607720 = x;
double r607721 = y;
double r607722 = z;
double r607723 = r607721 - r607722;
double r607724 = 1.0;
double r607725 = r607723 + r607724;
double r607726 = r607720 * r607725;
double r607727 = r607726 / r607722;
return r607727;
}
double f(double x, double y, double z) {
double r607728 = x;
double r607729 = -3.4374981009777875e+27;
bool r607730 = r607728 <= r607729;
double r607731 = z;
double r607732 = r607728 / r607731;
double r607733 = 1.0;
double r607734 = y;
double r607735 = r607733 + r607734;
double r607736 = r607732 * r607735;
double r607737 = r607736 - r607728;
double r607738 = 8.649219799147649e-36;
bool r607739 = r607728 <= r607738;
double r607740 = r607728 * r607734;
double r607741 = 1.0;
double r607742 = r607741 / r607731;
double r607743 = r607740 * r607742;
double r607744 = fma(r607733, r607732, r607743);
double r607745 = r607744 - r607728;
double r607746 = r607734 - r607731;
double r607747 = r607746 + r607733;
double r607748 = r607731 / r607747;
double r607749 = r607728 / r607748;
double r607750 = r607739 ? r607745 : r607749;
double r607751 = r607730 ? r607737 : r607750;
return r607751;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 10.2 |
|---|---|
| Target | 0.5 |
| Herbie | 0.1 |
if x < -3.4374981009777875e+27Initial program 28.2
Taylor expanded around 0 9.1
Simplified9.1
Taylor expanded around 0 9.1
Simplified0.1
if -3.4374981009777875e+27 < x < 8.649219799147649e-36Initial program 0.3
Taylor expanded around 0 0.1
Simplified0.1
rmApplied div-inv0.1
if 8.649219799147649e-36 < x Initial program 21.3
rmApplied associate-/l*0.2
Final simplification0.1
herbie shell --seed 2020046 +o rules:numerics
(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))