\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 r481642 = x;
double r481643 = y;
double r481644 = r481642 + r481643;
double r481645 = 1.0;
double r481646 = z;
double r481647 = r481643 / r481646;
double r481648 = r481645 - r481647;
double r481649 = r481644 / r481648;
return r481649;
}
double f(double x, double y, double z) {
double r481650 = y;
double r481651 = -164807406.99402395;
bool r481652 = r481650 <= r481651;
double r481653 = 2.1140046859011662e+43;
bool r481654 = r481650 <= r481653;
double r481655 = !r481654;
bool r481656 = r481652 || r481655;
double r481657 = 1.0;
double r481658 = 1.0;
double r481659 = x;
double r481660 = r481659 + r481650;
double r481661 = r481658 / r481660;
double r481662 = r481660 / r481650;
double r481663 = r481657 / r481662;
double r481664 = z;
double r481665 = r481663 / r481664;
double r481666 = r481661 - r481665;
double r481667 = r481657 / r481666;
double r481668 = r481650 / r481664;
double r481669 = r481658 - r481668;
double r481670 = r481660 / r481669;
double r481671 = r481656 ? r481667 : r481670;
return r481671;
}




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))))