\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z}\begin{array}{l}
\mathbf{if}\;\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z} \le -9.2290174913998737 \cdot 10^{129} \lor \neg \left(\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z} \le 3.0292350933407683 \cdot 10^{-45}\right):\\
\;\;\;\;\frac{x}{z} \cdot \left(1 + y\right) - x\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{\frac{z}{\left(y - z\right) + 1}}\\
\end{array}double f(double x, double y, double z) {
double r560122 = x;
double r560123 = y;
double r560124 = z;
double r560125 = r560123 - r560124;
double r560126 = 1.0;
double r560127 = r560125 + r560126;
double r560128 = r560122 * r560127;
double r560129 = r560128 / r560124;
return r560129;
}
double f(double x, double y, double z) {
double r560130 = x;
double r560131 = y;
double r560132 = z;
double r560133 = r560131 - r560132;
double r560134 = 1.0;
double r560135 = r560133 + r560134;
double r560136 = r560130 * r560135;
double r560137 = r560136 / r560132;
double r560138 = -9.229017491399874e+129;
bool r560139 = r560137 <= r560138;
double r560140 = 3.029235093340768e-45;
bool r560141 = r560137 <= r560140;
double r560142 = !r560141;
bool r560143 = r560139 || r560142;
double r560144 = r560130 / r560132;
double r560145 = r560134 + r560131;
double r560146 = r560144 * r560145;
double r560147 = r560146 - r560130;
double r560148 = r560132 / r560135;
double r560149 = r560130 / r560148;
double r560150 = r560143 ? r560147 : r560149;
return r560150;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 9.8 |
|---|---|
| Target | 0.4 |
| Herbie | 0.4 |
if (/ (* x (+ (- y z) 1.0)) z) < -9.229017491399874e+129 or 3.029235093340768e-45 < (/ (* x (+ (- y z) 1.0)) z) Initial program 18.0
Taylor expanded around 0 6.4
Simplified0.1
if -9.229017491399874e+129 < (/ (* x (+ (- y z) 1.0)) z) < 3.029235093340768e-45Initial program 0.1
rmApplied associate-/l*0.8
Final simplification0.4
herbie shell --seed 2020045
(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))