\frac{x \cdot \left(\left(y - z\right) + 1.0\right)}{z}\begin{array}{l}
\mathbf{if}\;z \le 1.9565246455280066 \cdot 10^{-10}:\\
\;\;\;\;\left(1.0 \cdot \frac{x}{z} + \frac{x}{z} \cdot y\right) - x\\
\mathbf{else}:\\
\;\;\;\;x \cdot \frac{\left(y - z\right) + 1.0}{z}\\
\end{array}double f(double x, double y, double z) {
double r28613383 = x;
double r28613384 = y;
double r28613385 = z;
double r28613386 = r28613384 - r28613385;
double r28613387 = 1.0;
double r28613388 = r28613386 + r28613387;
double r28613389 = r28613383 * r28613388;
double r28613390 = r28613389 / r28613385;
return r28613390;
}
double f(double x, double y, double z) {
double r28613391 = z;
double r28613392 = 1.9565246455280066e-10;
bool r28613393 = r28613391 <= r28613392;
double r28613394 = 1.0;
double r28613395 = x;
double r28613396 = r28613395 / r28613391;
double r28613397 = r28613394 * r28613396;
double r28613398 = y;
double r28613399 = r28613396 * r28613398;
double r28613400 = r28613397 + r28613399;
double r28613401 = r28613400 - r28613395;
double r28613402 = r28613398 - r28613391;
double r28613403 = r28613402 + r28613394;
double r28613404 = r28613403 / r28613391;
double r28613405 = r28613395 * r28613404;
double r28613406 = r28613393 ? r28613401 : r28613405;
return r28613406;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 9.4 |
|---|---|
| Target | 0.5 |
| Herbie | 0.9 |
if z < 1.9565246455280066e-10Initial program 6.6
rmApplied associate-/l*4.7
Taylor expanded around 0 2.2
Simplified1.3
if 1.9565246455280066e-10 < z Initial program 15.4
rmApplied associate-/l*0.1
rmApplied div-inv0.1
Simplified0.1
Final simplification0.9
herbie shell --seed 2019168
(FPCore (x y z)
:name "Diagrams.TwoD.Segment.Bernstein:evaluateBernstein from diagrams-lib-1.3.0.3"
:herbie-target
(if (< x -2.71483106713436e-162) (- (* (+ 1 y) (/ x z)) x) (if (< x 3.874108816439546e-197) (* (* x (+ (- y z) 1.0)) (/ 1 z)) (- (* (+ 1 y) (/ x z)) x)))
(/ (* x (+ (- y z) 1.0)) z))