\frac{x + y}{1 - \frac{y}{z}}\begin{array}{l}
\mathbf{if}\;y \le -164807406.9940239489078521728515625 \lor \neg \left(y \le 21140046859011661824211317635153590227040000\right):\\
\;\;\;\;\frac{1}{\frac{1}{x + y} - \frac{\frac{1}{\frac{x + y}{y}}}{z}}\\
\mathbf{else}:\\
\;\;\;\;\frac{x + y}{1 - \frac{y}{z}}\\
\end{array}double f(double x, double y, double z) {
double r400238 = x;
double r400239 = y;
double r400240 = r400238 + r400239;
double r400241 = 1.0;
double r400242 = z;
double r400243 = r400239 / r400242;
double r400244 = r400241 - r400243;
double r400245 = r400240 / r400244;
return r400245;
}
double f(double x, double y, double z) {
double r400246 = y;
double r400247 = -164807406.99402395;
bool r400248 = r400246 <= r400247;
double r400249 = 2.1140046859011662e+43;
bool r400250 = r400246 <= r400249;
double r400251 = !r400250;
bool r400252 = r400248 || r400251;
double r400253 = 1.0;
double r400254 = 1.0;
double r400255 = x;
double r400256 = r400255 + r400246;
double r400257 = r400254 / r400256;
double r400258 = r400256 / r400246;
double r400259 = r400253 / r400258;
double r400260 = z;
double r400261 = r400259 / r400260;
double r400262 = r400257 - r400261;
double r400263 = r400253 / r400262;
double r400264 = r400246 / r400260;
double r400265 = r400254 - r400264;
double r400266 = r400256 / r400265;
double r400267 = r400252 ? r400263 : r400266;
return r400267;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 7.6 |
|---|---|
| Target | 4.2 |
| Herbie | 0.2 |
if y < -164807406.99402395 or 2.1140046859011662e+43 < y Initial program 16.5
rmApplied clear-num16.6
rmApplied div-sub16.6
Simplified0.2
rmApplied clear-num0.2
if -164807406.99402395 < y < 2.1140046859011662e+43Initial program 0.2
Final simplification0.2
herbie shell --seed 2019323
(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))))