\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 -4.54809909365855772791856768185597692522 \cdot 10^{-9} \lor \neg \left(\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z} \le 1.231384797345861064411732315459653816138 \cdot 10^{161}\right):\\
\;\;\;\;\frac{x}{z} \cdot \left(\left(y - z\right) + 1\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{\frac{z}{\left(y - z\right) + 1}}\\
\end{array}double f(double x, double y, double z) {
double r863632 = x;
double r863633 = y;
double r863634 = z;
double r863635 = r863633 - r863634;
double r863636 = 1.0;
double r863637 = r863635 + r863636;
double r863638 = r863632 * r863637;
double r863639 = r863638 / r863634;
return r863639;
}
double f(double x, double y, double z) {
double r863640 = x;
double r863641 = y;
double r863642 = z;
double r863643 = r863641 - r863642;
double r863644 = 1.0;
double r863645 = r863643 + r863644;
double r863646 = r863640 * r863645;
double r863647 = r863646 / r863642;
double r863648 = -4.548099093658558e-09;
bool r863649 = r863647 <= r863648;
double r863650 = 1.231384797345861e+161;
bool r863651 = r863647 <= r863650;
double r863652 = !r863651;
bool r863653 = r863649 || r863652;
double r863654 = r863640 / r863642;
double r863655 = r863654 * r863645;
double r863656 = r863642 / r863645;
double r863657 = r863640 / r863656;
double r863658 = r863653 ? r863655 : r863657;
return r863658;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 10.5 |
|---|---|
| Target | 0.4 |
| Herbie | 0.7 |
if (/ (* x (+ (- y z) 1.0)) z) < -4.548099093658558e-09 or 1.231384797345861e+161 < (/ (* x (+ (- y z) 1.0)) z) Initial program 21.5
rmApplied associate-/l*5.6
rmApplied associate-/r/0.2
if -4.548099093658558e-09 < (/ (* x (+ (- y z) 1.0)) z) < 1.231384797345861e+161Initial program 0.1
rmApplied associate-/l*1.2
Final simplification0.7
herbie shell --seed 2019353
(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))