\frac{x \cdot y}{\left(z \cdot z\right) \cdot \left(z + 1\right)}\begin{array}{l}
\mathbf{if}\;z \le -2.786098057235616148006804323569865742177 \cdot 10^{-62}:\\
\;\;\;\;\frac{\frac{x \cdot \frac{y}{1 + z}}{z}}{z}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{x}{z}}{\frac{1 + z}{y} \cdot z}\\
\end{array}double f(double x, double y, double z) {
double r12893795 = x;
double r12893796 = y;
double r12893797 = r12893795 * r12893796;
double r12893798 = z;
double r12893799 = r12893798 * r12893798;
double r12893800 = 1.0;
double r12893801 = r12893798 + r12893800;
double r12893802 = r12893799 * r12893801;
double r12893803 = r12893797 / r12893802;
return r12893803;
}
double f(double x, double y, double z) {
double r12893804 = z;
double r12893805 = -2.786098057235616e-62;
bool r12893806 = r12893804 <= r12893805;
double r12893807 = x;
double r12893808 = y;
double r12893809 = 1.0;
double r12893810 = r12893809 + r12893804;
double r12893811 = r12893808 / r12893810;
double r12893812 = r12893807 * r12893811;
double r12893813 = r12893812 / r12893804;
double r12893814 = r12893813 / r12893804;
double r12893815 = r12893807 / r12893804;
double r12893816 = r12893810 / r12893808;
double r12893817 = r12893816 * r12893804;
double r12893818 = r12893815 / r12893817;
double r12893819 = r12893806 ? r12893814 : r12893818;
return r12893819;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 14.6 |
|---|---|
| Target | 3.9 |
| Herbie | 3.2 |
if z < -2.786098057235616e-62Initial program 9.5
rmApplied times-frac4.0
rmApplied *-un-lft-identity4.0
Applied times-frac2.1
Applied associate-*l*1.5
rmApplied associate-*l/2.3
Applied associate-*r/2.3
Simplified2.2
if -2.786098057235616e-62 < z Initial program 17.9
rmApplied times-frac15.2
rmApplied *-un-lft-identity15.2
Applied times-frac8.3
Applied associate-*l*3.2
rmApplied clear-num3.3
rmApplied un-div-inv3.3
Applied frac-times3.9
Simplified3.9
Final simplification3.2
herbie shell --seed 2019172 +o rules:numerics
(FPCore (x y z)
:name "Statistics.Distribution.Beta:$cvariance from math-functions-0.1.5.2"
:herbie-target
(if (< z 249.6182814532307) (/ (* y (/ x z)) (+ z (* z z))) (/ (* (/ (/ y z) (+ 1.0 z)) x) z))
(/ (* x y) (* (* z z) (+ z 1.0))))