\frac{\frac{1}{x}}{y \cdot \left(1 + z \cdot z\right)}\begin{array}{l}
\mathbf{if}\;y \cdot \left(1 + z \cdot z\right) \leq -\infty \lor \neg \left(y \cdot \left(1 + z \cdot z\right) \leq 2.526817269739846 \cdot 10^{+96}\right):\\
\;\;\;\;\frac{\frac{-1}{y \cdot x}}{-1 - z \cdot z}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{x} \cdot \frac{\frac{1}{y}}{1 + z \cdot z}\\
\end{array}(FPCore (x y z) :precision binary64 (/ (/ 1.0 x) (* y (+ 1.0 (* z z)))))
(FPCore (x y z)
:precision binary64
(if (or (<= (* y (+ 1.0 (* z z))) (- INFINITY))
(not (<= (* y (+ 1.0 (* z z))) 2.526817269739846e+96)))
(/ (/ -1.0 (* y x)) (- -1.0 (* z z)))
(* (/ 1.0 x) (/ (/ 1.0 y) (+ 1.0 (* z 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 * (1.0 + (z * z))) <= -((double) INFINITY)) || !((y * (1.0 + (z * z))) <= 2.526817269739846e+96)) {
tmp = (-1.0 / (y * x)) / (-1.0 - (z * z));
} else {
tmp = (1.0 / x) * ((1.0 / y) / (1.0 + (z * z)));
}
return tmp;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 6.7 |
|---|---|
| Target | 5.9 |
| Herbie | 5.6 |
if (*.f64 y (+.f64 1 (*.f64 z z))) < -inf.0 or 2.5268172697398459e96 < (*.f64 y (+.f64 1 (*.f64 z z))) Initial program 13.7
rmApplied associate-/r*_binary6411.3
rmApplied frac-2neg_binary6411.3
Simplified11.4
Simplified11.4
if -inf.0 < (*.f64 y (+.f64 1 (*.f64 z z))) < 2.5268172697398459e96Initial program 0.3
rmApplied associate-/r*_binary642.6
rmApplied *-un-lft-identity_binary642.6
Applied div-inv_binary642.7
Applied times-frac_binary640.4
Simplified0.4
Final simplification5.6
herbie shell --seed 2020253
(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)))))