\frac{x + y}{1 - \frac{y}{z}}\begin{array}{l}
\mathbf{if}\;\frac{x + y}{1 - \frac{y}{z}} \le -1.6998415276277967 \cdot 10^{-279} \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}{\sqrt{1} + \frac{\sqrt{y}}{\sqrt{z}}} \cdot \frac{x + y}{\sqrt{1} - \frac{\sqrt{y}}{\sqrt{z}}}\\
\end{array}double f(double x, double y, double z) {
double r517840 = x;
double r517841 = y;
double r517842 = r517840 + r517841;
double r517843 = 1.0;
double r517844 = z;
double r517845 = r517841 / r517844;
double r517846 = r517843 - r517845;
double r517847 = r517842 / r517846;
return r517847;
}
double f(double x, double y, double z) {
double r517848 = x;
double r517849 = y;
double r517850 = r517848 + r517849;
double r517851 = 1.0;
double r517852 = z;
double r517853 = r517849 / r517852;
double r517854 = r517851 - r517853;
double r517855 = r517850 / r517854;
double r517856 = -1.6998415276277967e-279;
bool r517857 = r517855 <= r517856;
double r517858 = -0.0;
bool r517859 = r517855 <= r517858;
double r517860 = !r517859;
bool r517861 = r517857 || r517860;
double r517862 = 1.0;
double r517863 = sqrt(r517851);
double r517864 = sqrt(r517849);
double r517865 = sqrt(r517852);
double r517866 = r517864 / r517865;
double r517867 = r517863 + r517866;
double r517868 = r517862 / r517867;
double r517869 = r517863 - r517866;
double r517870 = r517850 / r517869;
double r517871 = r517868 * r517870;
double r517872 = r517861 ? r517855 : r517871;
return r517872;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 7.4 |
|---|---|
| Target | 4.2 |
| Herbie | 6.2 |
if (/ (+ x y) (- 1.0 (/ y z))) < -1.6998415276277967e-279 or -0.0 < (/ (+ x y) (- 1.0 (/ y z))) Initial program 0.1
if -1.6998415276277967e-279 < (/ (+ x y) (- 1.0 (/ y z))) < -0.0Initial program 57.2
rmApplied add-sqr-sqrt59.6
Applied add-sqr-sqrt61.6
Applied times-frac61.6
Applied add-sqr-sqrt61.6
Applied difference-of-squares61.6
Applied *-un-lft-identity61.6
Applied times-frac47.7
Final simplification6.2
herbie shell --seed 2020027 +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))))