\frac{x \cdot \left(y + z\right)}{z}\begin{array}{l}
\mathbf{if}\;\frac{\left(y + z\right) \cdot x}{z} \le 1.2164222642491233 \cdot 10^{-71}:\\
\;\;\;\;x \cdot \frac{y + z}{z}\\
\mathbf{elif}\;\frac{\left(y + z\right) \cdot x}{z} \le 4.7576076920553454 \cdot 10^{+303}:\\
\;\;\;\;\frac{\left(y + z\right) \cdot x}{z}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{z} \cdot \left(y + z\right)\\
\end{array}double f(double x, double y, double z) {
double r7748917 = x;
double r7748918 = y;
double r7748919 = z;
double r7748920 = r7748918 + r7748919;
double r7748921 = r7748917 * r7748920;
double r7748922 = r7748921 / r7748919;
return r7748922;
}
double f(double x, double y, double z) {
double r7748923 = y;
double r7748924 = z;
double r7748925 = r7748923 + r7748924;
double r7748926 = x;
double r7748927 = r7748925 * r7748926;
double r7748928 = r7748927 / r7748924;
double r7748929 = 1.2164222642491233e-71;
bool r7748930 = r7748928 <= r7748929;
double r7748931 = r7748925 / r7748924;
double r7748932 = r7748926 * r7748931;
double r7748933 = 4.7576076920553454e+303;
bool r7748934 = r7748928 <= r7748933;
double r7748935 = r7748926 / r7748924;
double r7748936 = r7748935 * r7748925;
double r7748937 = r7748934 ? r7748928 : r7748936;
double r7748938 = r7748930 ? r7748932 : r7748937;
return r7748938;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 11.1 |
|---|---|
| Target | 3.0 |
| Herbie | 1.7 |
if (/ (* x (+ y z)) z) < 1.2164222642491233e-71Initial program 10.6
rmApplied *-un-lft-identity10.6
Applied times-frac2.3
Simplified2.3
if 1.2164222642491233e-71 < (/ (* x (+ y z)) z) < 4.7576076920553454e+303Initial program 0.2
if 4.7576076920553454e+303 < (/ (* x (+ y z)) z) Initial program 57.9
rmApplied associate-/l*0.5
rmApplied associate-/r/0.8
Final simplification1.7
herbie shell --seed 2019156
(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))