\frac{x + y}{1 - \frac{y}{z}}\begin{array}{l}
\mathbf{if}\;\frac{x + y}{1 - \frac{y}{z}} \le -2.833440705943035823332213321994716089663 \cdot 10^{-251} \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{x + y}{\sqrt{1} + \frac{\sqrt{y}}{\sqrt{z}}}}{\sqrt{1} - \frac{\sqrt{y}}{\sqrt{z}}}\\
\end{array}double f(double x, double y, double z) {
double r659413 = x;
double r659414 = y;
double r659415 = r659413 + r659414;
double r659416 = 1.0;
double r659417 = z;
double r659418 = r659414 / r659417;
double r659419 = r659416 - r659418;
double r659420 = r659415 / r659419;
return r659420;
}
double f(double x, double y, double z) {
double r659421 = x;
double r659422 = y;
double r659423 = r659421 + r659422;
double r659424 = 1.0;
double r659425 = z;
double r659426 = r659422 / r659425;
double r659427 = r659424 - r659426;
double r659428 = r659423 / r659427;
double r659429 = -2.833440705943036e-251;
bool r659430 = r659428 <= r659429;
double r659431 = 0.0;
bool r659432 = r659428 <= r659431;
double r659433 = !r659432;
bool r659434 = r659430 || r659433;
double r659435 = sqrt(r659424);
double r659436 = sqrt(r659422);
double r659437 = sqrt(r659425);
double r659438 = r659436 / r659437;
double r659439 = r659435 + r659438;
double r659440 = r659423 / r659439;
double r659441 = r659435 - r659438;
double r659442 = r659440 / r659441;
double r659443 = r659434 ? r659428 : r659442;
return r659443;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 7.6 |
|---|---|
| Target | 4.0 |
| Herbie | 6.6 |
if (/ (+ x y) (- 1.0 (/ y z))) < -2.833440705943036e-251 or 0.0 < (/ (+ x y) (- 1.0 (/ y z))) Initial program 4.1
if -2.833440705943036e-251 < (/ (+ x y) (- 1.0 (/ y z))) < 0.0Initial program 49.3
rmApplied add-sqr-sqrt54.7
Applied add-sqr-sqrt60.3
Applied times-frac60.3
Applied add-sqr-sqrt60.3
Applied difference-of-squares60.3
Applied associate-/r*57.8
Final simplification6.6
herbie shell --seed 2019354
(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))))