\frac{x \cdot \left(y + z\right)}{z}\begin{array}{l}
\mathbf{if}\;x \le -6.53410616126814706 \cdot 10^{89} \lor \neg \left(x \le 1.3615881164524897 \cdot 10^{-138}\right):\\
\;\;\;\;\mathsf{fma}\left(\frac{y}{z}, x, x\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{x}{z}, y, x\right)\\
\end{array}double f(double x, double y, double z) {
double r431521 = x;
double r431522 = y;
double r431523 = z;
double r431524 = r431522 + r431523;
double r431525 = r431521 * r431524;
double r431526 = r431525 / r431523;
return r431526;
}
double f(double x, double y, double z) {
double r431527 = x;
double r431528 = -6.534106161268147e+89;
bool r431529 = r431527 <= r431528;
double r431530 = 1.3615881164524897e-138;
bool r431531 = r431527 <= r431530;
double r431532 = !r431531;
bool r431533 = r431529 || r431532;
double r431534 = y;
double r431535 = z;
double r431536 = r431534 / r431535;
double r431537 = fma(r431536, r431527, r431527);
double r431538 = r431527 / r431535;
double r431539 = fma(r431538, r431534, r431527);
double r431540 = r431533 ? r431537 : r431539;
return r431540;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 12.4 |
|---|---|
| Target | 3.1 |
| Herbie | 2.0 |
if x < -6.534106161268147e+89 or 1.3615881164524897e-138 < x Initial program 19.1
Simplified0.9
if -6.534106161268147e+89 < x < 1.3615881164524897e-138Initial program 6.3
Taylor expanded around 0 3.3
Simplified3.0
Final simplification2.0
herbie shell --seed 2020020 +o rules:numerics
(FPCore (x y z)
:name "Numeric.SpecFunctions:choose from math-functions-0.1.5.2"
:precision binary64
:herbie-target
(/ x (/ z (+ y z)))
(/ (* x (+ y z)) z))