\frac{x + y}{1 - \frac{y}{z}}\begin{array}{l}
\mathbf{if}\;\frac{x + y}{1 - \frac{y}{z}} \le -5.260737244167179 \cdot 10^{-286} \lor \neg \left(\frac{x + y}{1 - \frac{y}{z}} \le 0.0\right):\\
\;\;\;\;\frac{x + y}{1 - \frac{y}{z}}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\frac{1}{x + y} - \frac{y}{\left(x + y\right) \cdot z}}\\
\end{array}double f(double x, double y, double z) {
double r719633 = x;
double r719634 = y;
double r719635 = r719633 + r719634;
double r719636 = 1.0;
double r719637 = z;
double r719638 = r719634 / r719637;
double r719639 = r719636 - r719638;
double r719640 = r719635 / r719639;
return r719640;
}
double f(double x, double y, double z) {
double r719641 = x;
double r719642 = y;
double r719643 = r719641 + r719642;
double r719644 = 1.0;
double r719645 = z;
double r719646 = r719642 / r719645;
double r719647 = r719644 - r719646;
double r719648 = r719643 / r719647;
double r719649 = -5.260737244167179e-286;
bool r719650 = r719648 <= r719649;
double r719651 = 0.0;
bool r719652 = r719648 <= r719651;
double r719653 = !r719652;
bool r719654 = r719650 || r719653;
double r719655 = 1.0;
double r719656 = r719644 / r719643;
double r719657 = r719643 * r719645;
double r719658 = r719642 / r719657;
double r719659 = r719656 - r719658;
double r719660 = r719655 / r719659;
double r719661 = r719654 ? r719648 : r719660;
return r719661;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 7.9 |
|---|---|
| Target | 4.1 |
| Herbie | 0.3 |
if (/ (+ x y) (- 1.0 (/ y z))) < -5.260737244167179e-286 or 0.0 < (/ (+ x y) (- 1.0 (/ y z))) Initial program 0.1
if -5.260737244167179e-286 < (/ (+ x y) (- 1.0 (/ y z))) < 0.0Initial program 58.4
rmApplied clear-num58.4
rmApplied div-sub58.4
Simplified1.6
Final simplification0.3
herbie shell --seed 2020046
(FPCore (x y z)
:name "Graphics.Rendering.Chart.Backend.Diagrams:calcFontMetrics from Chart-diagrams-1.5.1, A"
:precision binary64
:herbie-target
(if (< y -3.7429310762689856e+171) (* (/ (+ y x) (- y)) z) (if (< y 3.5534662456086734e+168) (/ (+ x y) (- 1 (/ y z))) (* (/ (+ y x) (- y)) z)))
(/ (+ x y) (- 1 (/ y z))))