\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z}\begin{array}{l}
\mathbf{if}\;z \le -2.61943798913748523 \cdot 10^{55}:\\
\;\;\;\;\frac{x}{\frac{1}{\frac{\left(y - z\right) + 1}{z}}}\\
\mathbf{elif}\;z \le 2.2731223542198846 \cdot 10^{49}:\\
\;\;\;\;\left(\frac{x \cdot y}{z} + 1 \cdot \frac{x}{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 r673707 = x;
double r673708 = y;
double r673709 = z;
double r673710 = r673708 - r673709;
double r673711 = 1.0;
double r673712 = r673710 + r673711;
double r673713 = r673707 * r673712;
double r673714 = r673713 / r673709;
return r673714;
}
double f(double x, double y, double z) {
double r673715 = z;
double r673716 = -2.619437989137485e+55;
bool r673717 = r673715 <= r673716;
double r673718 = x;
double r673719 = 1.0;
double r673720 = y;
double r673721 = r673720 - r673715;
double r673722 = 1.0;
double r673723 = r673721 + r673722;
double r673724 = r673723 / r673715;
double r673725 = r673719 / r673724;
double r673726 = r673718 / r673725;
double r673727 = 2.2731223542198846e+49;
bool r673728 = r673715 <= r673727;
double r673729 = r673718 * r673720;
double r673730 = r673729 / r673715;
double r673731 = r673718 / r673715;
double r673732 = r673722 * r673731;
double r673733 = r673730 + r673732;
double r673734 = r673733 - r673718;
double r673735 = r673715 / r673723;
double r673736 = r673718 / r673735;
double r673737 = r673728 ? r673734 : r673736;
double r673738 = r673717 ? r673726 : r673737;
return r673738;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 10.5 |
|---|---|
| Target | 0.5 |
| Herbie | 0.3 |
if z < -2.619437989137485e+55Initial program 20.9
rmApplied associate-/l*0.1
rmApplied clear-num0.1
if -2.619437989137485e+55 < z < 2.2731223542198846e+49Initial program 0.8
Taylor expanded around 0 0.5
if 2.2731223542198846e+49 < z Initial program 18.2
rmApplied associate-/l*0.1
Final simplification0.3
herbie shell --seed 2020018
(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))