\frac{x + y}{1 - \frac{y}{z}}\begin{array}{l}
\mathbf{if}\;\frac{x + y}{1 - \frac{y}{z}} \le -4.1818847110488908 \cdot 10^{-283} \lor \neg \left(\frac{x + y}{1 - \frac{y}{z}} \le -0.0\right):\\
\;\;\;\;\frac{x + y}{1 - \frac{y}{z}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{1}{\sqrt{1} + \frac{\sqrt{y}}{\sqrt{z}}}}{\frac{\sqrt{1} - \frac{\sqrt{y}}{\sqrt{z}}}{x + y}}\\
\end{array}double f(double x, double y, double z) {
double r577895 = x;
double r577896 = y;
double r577897 = r577895 + r577896;
double r577898 = 1.0;
double r577899 = z;
double r577900 = r577896 / r577899;
double r577901 = r577898 - r577900;
double r577902 = r577897 / r577901;
return r577902;
}
double f(double x, double y, double z) {
double r577903 = x;
double r577904 = y;
double r577905 = r577903 + r577904;
double r577906 = 1.0;
double r577907 = z;
double r577908 = r577904 / r577907;
double r577909 = r577906 - r577908;
double r577910 = r577905 / r577909;
double r577911 = -4.181884711048891e-283;
bool r577912 = r577910 <= r577911;
double r577913 = -0.0;
bool r577914 = r577910 <= r577913;
double r577915 = !r577914;
bool r577916 = r577912 || r577915;
double r577917 = 1.0;
double r577918 = sqrt(r577906);
double r577919 = sqrt(r577904);
double r577920 = sqrt(r577907);
double r577921 = r577919 / r577920;
double r577922 = r577918 + r577921;
double r577923 = r577917 / r577922;
double r577924 = r577918 - r577921;
double r577925 = r577924 / r577905;
double r577926 = r577923 / r577925;
double r577927 = r577916 ? r577910 : r577926;
return r577927;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 7.6 |
|---|---|
| Target | 3.9 |
| Herbie | 6.2 |
if (/ (+ x y) (- 1.0 (/ y z))) < -4.181884711048891e-283 or -0.0 < (/ (+ x y) (- 1.0 (/ y z))) Initial program 0.1
if -4.181884711048891e-283 < (/ (+ x y) (- 1.0 (/ y z))) < -0.0Initial program 58.4
rmApplied clear-num58.4
rmApplied *-un-lft-identity58.4
Applied add-sqr-sqrt60.5
Applied add-sqr-sqrt62.5
Applied times-frac62.5
Applied add-sqr-sqrt62.5
Applied difference-of-squares62.5
Applied times-frac47.8
Applied associate-/r*47.8
Simplified47.8
Final simplification6.2
herbie shell --seed 2020065 +o rules:numerics
(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))))