\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z}\begin{array}{l}
\mathbf{if}\;z \le -5.59946752196078414 \cdot 10^{-62}:\\
\;\;\;\;x \cdot \frac{1 + y}{z} - x\\
\mathbf{elif}\;z \le 2.95754151107119427 \cdot 10^{32}:\\
\;\;\;\;\frac{1}{\frac{z}{x \cdot \left(\left(y - z\right) + 1\right)}}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{\frac{z}{\left(y - z\right) + 1}}\\
\end{array}double f(double x, double y, double z) {
double r734709 = x;
double r734710 = y;
double r734711 = z;
double r734712 = r734710 - r734711;
double r734713 = 1.0;
double r734714 = r734712 + r734713;
double r734715 = r734709 * r734714;
double r734716 = r734715 / r734711;
return r734716;
}
double f(double x, double y, double z) {
double r734717 = z;
double r734718 = -5.599467521960784e-62;
bool r734719 = r734717 <= r734718;
double r734720 = x;
double r734721 = 1.0;
double r734722 = y;
double r734723 = r734721 + r734722;
double r734724 = r734723 / r734717;
double r734725 = r734720 * r734724;
double r734726 = r734725 - r734720;
double r734727 = 2.9575415110711943e+32;
bool r734728 = r734717 <= r734727;
double r734729 = 1.0;
double r734730 = r734722 - r734717;
double r734731 = r734730 + r734721;
double r734732 = r734720 * r734731;
double r734733 = r734717 / r734732;
double r734734 = r734729 / r734733;
double r734735 = r734717 / r734731;
double r734736 = r734720 / r734735;
double r734737 = r734728 ? r734734 : r734736;
double r734738 = r734719 ? r734726 : r734737;
return r734738;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 10.1 |
|---|---|
| Target | 0.4 |
| Herbie | 0.3 |
if z < -5.599467521960784e-62Initial program 13.6
Taylor expanded around 0 5.1
Simplified2.3
rmApplied div-inv2.3
Applied associate-*l*0.4
Simplified0.4
if -5.599467521960784e-62 < z < 2.9575415110711943e+32Initial program 0.3
rmApplied clear-num0.5
if 2.9575415110711943e+32 < z Initial program 18.7
rmApplied associate-/l*0.1
Final simplification0.3
herbie shell --seed 2020042
(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))