\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 r30736783 = x;
double r30736784 = y;
double r30736785 = z;
double r30736786 = r30736784 + r30736785;
double r30736787 = r30736783 * r30736786;
double r30736788 = r30736787 / r30736785;
return r30736788;
}
double f(double x, double y, double z) {
double r30736789 = z;
double r30736790 = -7.915584825269419e+31;
bool r30736791 = r30736789 <= r30736790;
double r30736792 = x;
double r30736793 = y;
double r30736794 = r30736789 + r30736793;
double r30736795 = r30736789 / r30736794;
double r30736796 = r30736792 / r30736795;
double r30736797 = 2.1107752358932127e-216;
bool r30736798 = r30736789 <= r30736797;
double r30736799 = r30736792 * r30736793;
double r30736800 = r30736799 / r30736789;
double r30736801 = r30736792 + r30736800;
double r30736802 = r30736798 ? r30736801 : r30736796;
double r30736803 = r30736791 ? r30736796 : r30736802;
return r30736803;
}




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