\frac{\frac{1}{x}}{y \cdot \left(1 + z \cdot z\right)}\begin{array}{l}
\mathbf{if}\;\frac{1}{x} \le -9.89983358260154139 \cdot 10^{51}:\\
\;\;\;\;\frac{\frac{1}{1}}{y \cdot \left(\sqrt{\mathsf{fma}\left(z, z, 1\right)} \cdot \left(\sqrt{\mathsf{fma}\left(z, z, 1\right)} \cdot x\right)\right)}\\
\mathbf{elif}\;\frac{1}{x} \le 3.57512253180957601 \cdot 10^{101}:\\
\;\;\;\;\frac{\frac{1}{x}}{y \cdot \left(1 + z \cdot z\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{1} \cdot \frac{\frac{1}{y}}{\mathsf{fma}\left(z, z, 1\right) \cdot x}\\
\end{array}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 temp;
if (((1.0 / x) <= -9.899833582601541e+51)) {
temp = ((1.0 / 1.0) / (y * (sqrt(fma(z, z, 1.0)) * (sqrt(fma(z, z, 1.0)) * x))));
} else {
double temp_1;
if (((1.0 / x) <= 3.575122531809576e+101)) {
temp_1 = ((1.0 / x) / (y * (1.0 + (z * z))));
} else {
temp_1 = ((1.0 / 1.0) * ((1.0 / y) / (fma(z, z, 1.0) * x)));
}
temp = temp_1;
}
return temp;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 6.7 |
|---|---|
| Target | 6.1 |
| Herbie | 5.4 |
if (/ 1.0 x) < -9.899833582601541e+51Initial program 13.9
Simplified10.4
rmApplied *-un-lft-identity10.4
Applied div-inv10.4
Applied times-frac10.4
Applied associate-/l*10.5
Simplified10.3
rmApplied add-sqr-sqrt10.3
Applied associate-*l*10.3
if -9.899833582601541e+51 < (/ 1.0 x) < 3.575122531809576e+101Initial program 2.7
if 3.575122531809576e+101 < (/ 1.0 x) Initial program 16.2
Simplified12.1
rmApplied *-un-lft-identity12.1
Applied div-inv12.1
Applied times-frac12.1
Applied associate-/l*12.2
Simplified12.1
rmApplied add-sqr-sqrt12.1
Applied associate-*l*12.1
rmApplied div-inv12.1
Simplified12.1
Final simplification5.4
herbie shell --seed 2020049 +o rules:numerics
(FPCore (x y z)
:name "Statistics.Distribution.CauchyLorentz:$cdensity from math-functions-0.1.5.2"
:precision binary64
:herbie-target
(if (< (* y (+ 1 (* z z))) #f) (/ (/ 1 y) (* (+ 1 (* z z)) x)) (if (< (* y (+ 1 (* z z))) 8.680743250567252e+305) (/ (/ 1 x) (* (+ 1 (* z z)) y)) (/ (/ 1 y) (* (+ 1 (* z z)) x))))
(/ (/ 1 x) (* y (+ 1 (* z z)))))