\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z}\begin{array}{l}
\mathbf{if}\;x \le -32557379355462839325163520 \lor \neg \left(x \le 7.170043320155678175136459501169904402577 \cdot 10^{-21}\right):\\
\;\;\;\;\frac{x}{\frac{z}{\left(y - z\right) + 1}}\\
\mathbf{else}:\\
\;\;\;\;\left(\frac{x \cdot y}{z} + 1 \cdot \frac{x}{z}\right) - x\\
\end{array}double f(double x, double y, double z) {
double r1694243 = x;
double r1694244 = y;
double r1694245 = z;
double r1694246 = r1694244 - r1694245;
double r1694247 = 1.0;
double r1694248 = r1694246 + r1694247;
double r1694249 = r1694243 * r1694248;
double r1694250 = r1694249 / r1694245;
return r1694250;
}
double f(double x, double y, double z) {
double r1694251 = x;
double r1694252 = -3.255737935546284e+25;
bool r1694253 = r1694251 <= r1694252;
double r1694254 = 7.170043320155678e-21;
bool r1694255 = r1694251 <= r1694254;
double r1694256 = !r1694255;
bool r1694257 = r1694253 || r1694256;
double r1694258 = z;
double r1694259 = y;
double r1694260 = r1694259 - r1694258;
double r1694261 = 1.0;
double r1694262 = r1694260 + r1694261;
double r1694263 = r1694258 / r1694262;
double r1694264 = r1694251 / r1694263;
double r1694265 = r1694251 * r1694259;
double r1694266 = r1694265 / r1694258;
double r1694267 = r1694251 / r1694258;
double r1694268 = r1694261 * r1694267;
double r1694269 = r1694266 + r1694268;
double r1694270 = r1694269 - r1694251;
double r1694271 = r1694257 ? r1694264 : r1694270;
return r1694271;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 10.2 |
|---|---|
| Target | 0.4 |
| Herbie | 0.1 |
if x < -3.255737935546284e+25 or 7.170043320155678e-21 < x Initial program 25.9
rmApplied associate-/l*0.1
if -3.255737935546284e+25 < x < 7.170043320155678e-21Initial program 0.3
Taylor expanded around 0 0.2
Final simplification0.1
herbie shell --seed 2019235
(FPCore (x y z)
:name "Diagrams.TwoD.Segment.Bernstein:evaluateBernstein from diagrams-lib-1.3.0.3"
:precision binary64
:herbie-target
(if (< x -2.7148310671343599e-162) (- (* (+ 1 y) (/ x z)) x) (if (< x 3.87410881643954616e-197) (* (* x (+ (- y z) 1)) (/ 1 z)) (- (* (+ 1 y) (/ x z)) x)))
(/ (* x (+ (- y z) 1)) z))