\frac{\frac{1}{x}}{y \cdot \left(1 + z \cdot z\right)}
\begin{array}{l}
\mathbf{if}\;y \leq -3.70384347346874 \cdot 10^{-310}:\\
\;\;\;\;\frac{\frac{1}{y \cdot x}}{\mathsf{fma}\left(z, z, 1\right)}\\
\mathbf{elif}\;y \leq 5.838039238768918 \cdot 10^{-31}:\\
\;\;\;\;\begin{array}{l}
t_0 := \sqrt{y} \cdot \mathsf{hypot}\left(1, z\right)\\
\frac{\frac{1}{x}}{t_0 \cdot t_0}
\end{array}\\
\mathbf{else}:\\
\;\;\;\;\begin{array}{l}
t_1 := \sqrt[3]{\frac{1}{x}}\\
\frac{t_1 \cdot t_1}{y} \cdot \left(\frac{\sqrt[3]{\frac{1}{\sqrt[3]{x} \cdot \sqrt[3]{x}}}}{\mathsf{hypot}\left(1, z\right)} \cdot \frac{\sqrt[3]{\frac{1}{\sqrt[3]{x}}}}{\mathsf{hypot}\left(1, z\right)}\right)
\end{array}\\
\end{array}
(FPCore (x y z) :precision binary64 (/ (/ 1.0 x) (* y (+ 1.0 (* z z)))))
(FPCore (x y z)
:precision binary64
(if (<= y -3.70384347346874e-310)
(/ (/ 1.0 (* y x)) (fma z z 1.0))
(if (<= y 5.838039238768918e-31)
(let* ((t_0 (* (sqrt y) (hypot 1.0 z)))) (/ (/ 1.0 x) (* t_0 t_0)))
(let* ((t_1 (cbrt (/ 1.0 x))))
(*
(/ (* t_1 t_1) y)
(*
(/ (cbrt (/ 1.0 (* (cbrt x) (cbrt x)))) (hypot 1.0 z))
(/ (cbrt (/ 1.0 (cbrt x))) (hypot 1.0 z))))))))double code(double x, double y, double z) {
return (1.0 / x) / (y * (1.0 + (z * z)));
}
double code(double x, double y, double z) {
double tmp;
if (y <= -3.70384347346874e-310) {
tmp = (1.0 / (y * x)) / fma(z, z, 1.0);
} else if (y <= 5.838039238768918e-31) {
double t_0 = sqrt(y) * hypot(1.0, z);
tmp = (1.0 / x) / (t_0 * t_0);
} else {
double t_1 = cbrt(1.0 / x);
tmp = ((t_1 * t_1) / y) * ((cbrt(1.0 / (cbrt(x) * cbrt(x))) / hypot(1.0, z)) * (cbrt(1.0 / cbrt(x)) / hypot(1.0, z)));
}
return tmp;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 6.6 |
|---|---|
| Target | 5.1 |
| Herbie | 3.9 |
if y < -3.703843473468744e-310Initial program 5.8
Simplified5.8
Applied associate-/r*_binary647.5
Simplified7.7
if -3.703843473468744e-310 < y < 5.83803923876891774e-31Initial program 11.0
Simplified11.0
Applied add-sqr-sqrt_binary6411.0
Applied add-sqr-sqrt_binary6411.2
Applied unswap-sqr_binary6411.2
Simplified11.2
Simplified4.5
if 5.83803923876891774e-31 < y Initial program 5.0
Simplified5.0
Applied add-cube-cbrt_binary645.5
Applied times-frac_binary642.6
Applied add-sqr-sqrt_binary642.6
Applied add-cube-cbrt_binary642.6
Applied add-cube-cbrt_binary642.6
Applied times-frac_binary642.6
Applied cbrt-prod_binary642.7
Applied times-frac_binary642.7
Simplified2.7
Simplified1.7
Final simplification3.9
herbie shell --seed 2022081
(FPCore (x y z)
:name "Statistics.Distribution.CauchyLorentz:$cdensity from math-functions-0.1.5.2"
:precision binary64
:herbie-target
(if (< (* y (+ 1.0 (* z z))) (- INFINITY)) (/ (/ 1.0 y) (* (+ 1.0 (* z z)) x)) (if (< (* y (+ 1.0 (* z z))) 8.680743250567252e+305) (/ (/ 1.0 x) (* (+ 1.0 (* z z)) y)) (/ (/ 1.0 y) (* (+ 1.0 (* z z)) x))))
(/ (/ 1.0 x) (* y (+ 1.0 (* z z)))))