(FPCore (x y z) :precision binary64 (/ (* x y) (* (* z z) (+ z 1.0))))
(FPCore (x y z)
:precision binary64
(let* ((t_0 (hypot z (sqrt z))) (t_1 (cbrt (fma z z z))))
(if (<= z 5.615096020682109e-280)
(/ (* (* x (/ 1.0 (* t_1 t_1))) (/ y t_1)) z)
(/ 1.0 (/ z (* (/ y t_0) (/ x t_0)))))))double code(double x, double y, double z) {
return (x * y) / ((z * z) * (z + 1.0));
}
double code(double x, double y, double z) {
double t_0 = hypot(z, sqrt(z));
double t_1 = cbrt(fma(z, z, z));
double tmp;
if (z <= 5.615096020682109e-280) {
tmp = ((x * (1.0 / (t_1 * t_1))) * (y / t_1)) / z;
} else {
tmp = 1.0 / (z / ((y / t_0) * (x / t_0)));
}
return tmp;
}
function code(x, y, z) return Float64(Float64(x * y) / Float64(Float64(z * z) * Float64(z + 1.0))) end
function code(x, y, z) t_0 = hypot(z, sqrt(z)) t_1 = cbrt(fma(z, z, z)) tmp = 0.0 if (z <= 5.615096020682109e-280) tmp = Float64(Float64(Float64(x * Float64(1.0 / Float64(t_1 * t_1))) * Float64(y / t_1)) / z); else tmp = Float64(1.0 / Float64(z / Float64(Float64(y / t_0) * Float64(x / t_0)))); end return tmp end
code[x_, y_, z_] := N[(N[(x * y), $MachinePrecision] / N[(N[(z * z), $MachinePrecision] * N[(z + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
code[x_, y_, z_] := Block[{t$95$0 = N[Sqrt[z ^ 2 + N[Sqrt[z], $MachinePrecision] ^ 2], $MachinePrecision]}, Block[{t$95$1 = N[Power[N[(z * z + z), $MachinePrecision], 1/3], $MachinePrecision]}, If[LessEqual[z, 5.615096020682109e-280], N[(N[(N[(x * N[(1.0 / N[(t$95$1 * t$95$1), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(y / t$95$1), $MachinePrecision]), $MachinePrecision] / z), $MachinePrecision], N[(1.0 / N[(z / N[(N[(y / t$95$0), $MachinePrecision] * N[(x / t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]
\frac{x \cdot y}{\left(z \cdot z\right) \cdot \left(z + 1\right)}
\begin{array}{l}
t_0 := \mathsf{hypot}\left(z, \sqrt{z}\right)\\
t_1 := \sqrt[3]{\mathsf{fma}\left(z, z, z\right)}\\
\mathbf{if}\;z \leq 5.615096020682109 \cdot 10^{-280}:\\
\;\;\;\;\frac{\left(x \cdot \frac{1}{t_1 \cdot t_1}\right) \cdot \frac{y}{t_1}}{z}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\frac{z}{\frac{y}{t_0} \cdot \frac{x}{t_0}}}\\
\end{array}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 14.4 |
|---|---|
| Target | 3.8 |
| Herbie | 3.4 |
if z < 5.61509602068210881e-280Initial program 14.2
Simplified8.8
Applied associate-*r/_binary644.8
Applied add-cube-cbrt_binary645.3
Applied *-un-lft-identity_binary645.3
Applied times-frac_binary645.3
Applied associate-*r*_binary644.4
if 5.61509602068210881e-280 < z Initial program 14.7
Simplified8.7
Applied associate-*r/_binary645.0
Applied clear-num_binary645.1
Simplified9.2
Applied add-sqr-sqrt_binary649.2
Applied times-frac_binary644.4
Simplified4.4
Simplified2.4
Final simplification3.4
herbie shell --seed 2022131
(FPCore (x y z)
:name "Statistics.Distribution.Beta:$cvariance from math-functions-0.1.5.2"
:precision binary64
: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))))