\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 r824545 = x;
double r824546 = y;
double r824547 = z;
double r824548 = r824546 - r824547;
double r824549 = 1.0;
double r824550 = r824548 + r824549;
double r824551 = r824545 * r824550;
double r824552 = r824551 / r824547;
return r824552;
}
double f(double x, double y, double z) {
double r824553 = x;
double r824554 = y;
double r824555 = z;
double r824556 = r824554 - r824555;
double r824557 = 1.0;
double r824558 = r824556 + r824557;
double r824559 = r824553 * r824558;
double r824560 = r824559 / r824555;
double r824561 = -9.229017491399874e+129;
bool r824562 = r824560 <= r824561;
double r824563 = 3.029235093340768e-45;
bool r824564 = r824560 <= r824563;
double r824565 = !r824564;
bool r824566 = r824562 || r824565;
double r824567 = r824553 / r824555;
double r824568 = r824557 + r824554;
double r824569 = r824567 * r824568;
double r824570 = r824569 - r824553;
double r824571 = r824555 / r824558;
double r824572 = r824553 / r824571;
double r824573 = r824566 ? r824570 : r824572;
return r824573;
}




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 +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))