\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}:\\
\;\;\;\;\mathsf{fma}\left(\frac{x}{z}, 1, \frac{x \cdot y}{z}\right) - x\\
\end{array}double f(double x, double y, double z) {
double r425249 = x;
double r425250 = y;
double r425251 = z;
double r425252 = r425250 - r425251;
double r425253 = 1.0;
double r425254 = r425252 + r425253;
double r425255 = r425249 * r425254;
double r425256 = r425255 / r425251;
return r425256;
}
double f(double x, double y, double z) {
double r425257 = x;
double r425258 = -3.255737935546284e+25;
bool r425259 = r425257 <= r425258;
double r425260 = 7.170043320155678e-21;
bool r425261 = r425257 <= r425260;
double r425262 = !r425261;
bool r425263 = r425259 || r425262;
double r425264 = z;
double r425265 = y;
double r425266 = r425265 - r425264;
double r425267 = 1.0;
double r425268 = r425266 + r425267;
double r425269 = r425264 / r425268;
double r425270 = r425257 / r425269;
double r425271 = r425257 / r425264;
double r425272 = r425257 * r425265;
double r425273 = r425272 / r425264;
double r425274 = fma(r425271, r425267, r425273);
double r425275 = r425274 - r425257;
double r425276 = r425263 ? r425270 : r425275;
return r425276;
}




Bits error versus x




Bits error versus y




Bits error versus z
| 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
Simplified0.2
Final simplification0.1
herbie shell --seed 2019235 +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.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))