\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z}\begin{array}{l}
\mathbf{if}\;z \le -4.40301390883669074 \cdot 10^{-70} \lor \neg \left(z \le 3.9888923668282164 \cdot 10^{-23}\right):\\
\;\;\;\;\mathsf{fma}\left(\frac{y}{z}, x, 1 \cdot \frac{x}{z} - x\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{z} \cdot \left(\left(y - z\right) + 1\right)\\
\end{array}double f(double x, double y, double z) {
double r635531 = x;
double r635532 = y;
double r635533 = z;
double r635534 = r635532 - r635533;
double r635535 = 1.0;
double r635536 = r635534 + r635535;
double r635537 = r635531 * r635536;
double r635538 = r635537 / r635533;
return r635538;
}
double f(double x, double y, double z) {
double r635539 = z;
double r635540 = -4.403013908836691e-70;
bool r635541 = r635539 <= r635540;
double r635542 = 3.9888923668282164e-23;
bool r635543 = r635539 <= r635542;
double r635544 = !r635543;
bool r635545 = r635541 || r635544;
double r635546 = y;
double r635547 = r635546 / r635539;
double r635548 = x;
double r635549 = 1.0;
double r635550 = r635548 / r635539;
double r635551 = r635549 * r635550;
double r635552 = r635551 - r635548;
double r635553 = fma(r635547, r635548, r635552);
double r635554 = r635546 - r635539;
double r635555 = r635554 + r635549;
double r635556 = r635550 * r635555;
double r635557 = r635545 ? r635553 : r635556;
return r635557;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 10.0 |
|---|---|
| Target | 0.4 |
| Herbie | 0.1 |
if z < -4.403013908836691e-70 or 3.9888923668282164e-23 < z Initial program 14.5
rmApplied associate-/l*0.1
rmApplied div-inv0.3
Taylor expanded around 0 5.1
Simplified0.2
if -4.403013908836691e-70 < z < 3.9888923668282164e-23Initial program 0.1
rmApplied associate-/l*9.5
rmApplied div-inv9.6
rmApplied un-div-inv9.5
Applied associate-/r/0.1
Final simplification0.1
herbie shell --seed 2020065 +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.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))