(FPCore (x y z) :precision binary64 (/ (* x y) (* (* z z) (+ z 1.0))))
(FPCore (x y z)
:precision binary64
(let* ((t_0 (cbrt (fma z z z)))
(t_1
(*
(* x (/ (* (cbrt y) (cbrt y)) (* t_0 t_0)))
(/ (/ (cbrt y) t_0) z))))
(if (<= (* x y) -1.3312952842167844e-99)
t_1
(if (<= (* x y) 2.2270002756079324e-147)
(* (/ y z) (/ x (fma z z z)))
t_1))))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 = cbrt(fma(z, z, z));
double t_1 = (x * ((cbrt(y) * cbrt(y)) / (t_0 * t_0))) * ((cbrt(y) / t_0) / z);
double tmp;
if ((x * y) <= -1.3312952842167844e-99) {
tmp = t_1;
} else if ((x * y) <= 2.2270002756079324e-147) {
tmp = (y / z) * (x / fma(z, z, z));
} else {
tmp = t_1;
}
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 = cbrt(fma(z, z, z)) t_1 = Float64(Float64(x * Float64(Float64(cbrt(y) * cbrt(y)) / Float64(t_0 * t_0))) * Float64(Float64(cbrt(y) / t_0) / z)) tmp = 0.0 if (Float64(x * y) <= -1.3312952842167844e-99) tmp = t_1; elseif (Float64(x * y) <= 2.2270002756079324e-147) tmp = Float64(Float64(y / z) * Float64(x / fma(z, z, z))); else tmp = t_1; 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[Power[N[(z * z + z), $MachinePrecision], 1/3], $MachinePrecision]}, Block[{t$95$1 = N[(N[(x * N[(N[(N[Power[y, 1/3], $MachinePrecision] * N[Power[y, 1/3], $MachinePrecision]), $MachinePrecision] / N[(t$95$0 * t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(N[(N[Power[y, 1/3], $MachinePrecision] / t$95$0), $MachinePrecision] / z), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[N[(x * y), $MachinePrecision], -1.3312952842167844e-99], t$95$1, If[LessEqual[N[(x * y), $MachinePrecision], 2.2270002756079324e-147], N[(N[(y / z), $MachinePrecision] * N[(x / N[(z * z + z), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$1]]]]
\frac{x \cdot y}{\left(z \cdot z\right) \cdot \left(z + 1\right)}
\begin{array}{l}
t_0 := \sqrt[3]{\mathsf{fma}\left(z, z, z\right)}\\
t_1 := \left(x \cdot \frac{\sqrt[3]{y} \cdot \sqrt[3]{y}}{t_0 \cdot t_0}\right) \cdot \frac{\frac{\sqrt[3]{y}}{t_0}}{z}\\
\mathbf{if}\;x \cdot y \leq -1.3312952842167844 \cdot 10^{-99}:\\
\;\;\;\;t_1\\
\mathbf{elif}\;x \cdot y \leq 2.2270002756079324 \cdot 10^{-147}:\\
\;\;\;\;\frac{y}{z} \cdot \frac{x}{\mathsf{fma}\left(z, z, z\right)}\\
\mathbf{else}:\\
\;\;\;\;t_1\\
\end{array}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 15.5 |
|---|---|
| Target | 4.4 |
| Herbie | 3.0 |
if (*.f64 x y) < -1.33129528421678439e-99 or 2.2270002756079324e-147 < (*.f64 x y) Initial program 14.0
Simplified10.4
Applied *-un-lft-identity_binary6410.4
Applied add-cube-cbrt_binary6410.9
Applied add-cube-cbrt_binary6411.0
Applied times-frac_binary6411.0
Applied times-frac_binary6411.0
Applied associate-*r*_binary644.6
Simplified4.6
if -1.33129528421678439e-99 < (*.f64 x y) < 2.2270002756079324e-147Initial program 17.5
Simplified7.6
Applied associate-*r/_binary642.3
Applied associate-/l*_binary647.2
Applied associate-/r/_binary647.2
Applied *-un-lft-identity_binary647.2
Applied times-frac_binary640.9
Simplified0.8
Final simplification3.0
herbie shell --seed 2022129
(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))))