\frac{x \cdot \left(y + z\right)}{z}\begin{array}{l}
\mathbf{if}\;z \le -79155848252694193587582928945152:\\
\;\;\;\;\frac{x}{\frac{z}{z + y}}\\
\mathbf{elif}\;z \le 2.110775235893212719144090988535183713368 \cdot 10^{-216}:\\
\;\;\;\;x + \frac{x \cdot y}{z}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{\frac{z}{z + y}}\\
\end{array}double f(double x, double y, double z) {
double r22132911 = x;
double r22132912 = y;
double r22132913 = z;
double r22132914 = r22132912 + r22132913;
double r22132915 = r22132911 * r22132914;
double r22132916 = r22132915 / r22132913;
return r22132916;
}
double f(double x, double y, double z) {
double r22132917 = z;
double r22132918 = -7.915584825269419e+31;
bool r22132919 = r22132917 <= r22132918;
double r22132920 = x;
double r22132921 = y;
double r22132922 = r22132917 + r22132921;
double r22132923 = r22132917 / r22132922;
double r22132924 = r22132920 / r22132923;
double r22132925 = 2.1107752358932127e-216;
bool r22132926 = r22132917 <= r22132925;
double r22132927 = r22132920 * r22132921;
double r22132928 = r22132927 / r22132917;
double r22132929 = r22132920 + r22132928;
double r22132930 = r22132926 ? r22132929 : r22132924;
double r22132931 = r22132919 ? r22132924 : r22132930;
return r22132931;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 12.8 |
|---|---|
| Target | 3.1 |
| Herbie | 2.2 |
if z < -7.915584825269419e+31 or 2.1107752358932127e-216 < z Initial program 15.0
rmApplied associate-/l*1.2
if -7.915584825269419e+31 < z < 2.1107752358932127e-216Initial program 7.1
Taylor expanded around 0 4.7
Final simplification2.2
herbie shell --seed 2019171
(FPCore (x y z)
:name "Numeric.SpecFunctions:choose from math-functions-0.1.5.2"
:herbie-target
(/ x (/ z (+ y z)))
(/ (* x (+ y z)) z))