\frac{x \cdot \left(y + z\right)}{z}\begin{array}{l}
\mathbf{if}\;z \le -8.53005333076934627 \cdot 10^{-4}:\\
\;\;\;\;x \cdot \left(\frac{y}{z} + 1\right)\\
\mathbf{elif}\;z \le 0.0968242458288034874:\\
\;\;\;\;\frac{x \cdot y}{z} + x\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{\frac{z}{y + z}}\\
\end{array}double f(double x, double y, double z) {
double r514845 = x;
double r514846 = y;
double r514847 = z;
double r514848 = r514846 + r514847;
double r514849 = r514845 * r514848;
double r514850 = r514849 / r514847;
return r514850;
}
double f(double x, double y, double z) {
double r514851 = z;
double r514852 = -0.0008530053330769346;
bool r514853 = r514851 <= r514852;
double r514854 = x;
double r514855 = y;
double r514856 = r514855 / r514851;
double r514857 = 1.0;
double r514858 = r514856 + r514857;
double r514859 = r514854 * r514858;
double r514860 = 0.09682424582880349;
bool r514861 = r514851 <= r514860;
double r514862 = r514854 * r514855;
double r514863 = r514862 / r514851;
double r514864 = r514863 + r514854;
double r514865 = r514855 + r514851;
double r514866 = r514851 / r514865;
double r514867 = r514854 / r514866;
double r514868 = r514861 ? r514864 : r514867;
double r514869 = r514853 ? r514859 : r514868;
return r514869;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 12.5 |
|---|---|
| Target | 3.2 |
| Herbie | 1.6 |
if z < -0.0008530053330769346Initial program 16.1
rmApplied *-un-lft-identity16.1
Applied times-frac0.1
Simplified0.1
Taylor expanded around 0 0.1
if -0.0008530053330769346 < z < 0.09682424582880349Initial program 7.0
rmApplied *-un-lft-identity7.0
Applied times-frac8.0
Simplified8.0
Taylor expanded around 0 8.0
rmApplied *-un-lft-identity8.0
Applied associate-*l*8.0
Simplified3.7
if 0.09682424582880349 < z Initial program 17.1
rmApplied associate-/l*0.1
Final simplification1.6
herbie shell --seed 2020042
(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))