\frac{x + y}{1 - \frac{y}{z}}\begin{array}{l}
\mathbf{if}\;y \le -15383809086552125997056 \lor \neg \left(y \le 2.211156237826685988742868005409983379368 \cdot 10^{49}\right):\\
\;\;\;\;\frac{1}{\frac{1}{x + y} - \frac{\frac{y}{x + y}}{z}}\\
\mathbf{else}:\\
\;\;\;\;\frac{x + y}{1 - \frac{y}{z}}\\
\end{array}double f(double x, double y, double z) {
double r457913 = x;
double r457914 = y;
double r457915 = r457913 + r457914;
double r457916 = 1.0;
double r457917 = z;
double r457918 = r457914 / r457917;
double r457919 = r457916 - r457918;
double r457920 = r457915 / r457919;
return r457920;
}
double f(double x, double y, double z) {
double r457921 = y;
double r457922 = -1.5383809086552126e+22;
bool r457923 = r457921 <= r457922;
double r457924 = 2.211156237826686e+49;
bool r457925 = r457921 <= r457924;
double r457926 = !r457925;
bool r457927 = r457923 || r457926;
double r457928 = 1.0;
double r457929 = 1.0;
double r457930 = x;
double r457931 = r457930 + r457921;
double r457932 = r457929 / r457931;
double r457933 = r457921 / r457931;
double r457934 = z;
double r457935 = r457933 / r457934;
double r457936 = r457932 - r457935;
double r457937 = r457928 / r457936;
double r457938 = r457921 / r457934;
double r457939 = r457929 - r457938;
double r457940 = r457931 / r457939;
double r457941 = r457927 ? r457937 : r457940;
return r457941;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 7.3 |
|---|---|
| Target | 3.9 |
| Herbie | 0.2 |
if y < -1.5383809086552126e+22 or 2.211156237826686e+49 < y Initial program 16.3
rmApplied clear-num16.4
rmApplied div-sub16.4
Simplified10.5
rmApplied associate-/r*0.2
if -1.5383809086552126e+22 < y < 2.211156237826686e+49Initial program 0.2
Final simplification0.2
herbie shell --seed 2019306
(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.74293107626898565e171) (* (/ (+ y x) (- y)) z) (if (< y 3.55346624560867344e168) (/ (+ x y) (- 1 (/ y z))) (* (/ (+ y x) (- y)) z)))
(/ (+ x y) (- 1 (/ y z))))