\frac{\frac{1}{x}}{y \cdot \left(1 + z \cdot z\right)}\begin{array}{l}
\mathbf{if}\;\frac{1}{x} \le -2.2032784662325649 \cdot 10^{-5} \lor \neg \left(\frac{1}{x} \le 1.47733744568406066 \cdot 10^{-203}\right):\\
\;\;\;\;\frac{\frac{1}{\mathsf{fma}\left(z, z, 1\right) \cdot x}}{y}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\mathsf{fma}\left(z, z, 1\right)} \cdot \frac{\frac{1}{y}}{x}\\
\end{array}double f(double x, double y, double z) {
double r263741 = 1.0;
double r263742 = x;
double r263743 = r263741 / r263742;
double r263744 = y;
double r263745 = z;
double r263746 = r263745 * r263745;
double r263747 = r263741 + r263746;
double r263748 = r263744 * r263747;
double r263749 = r263743 / r263748;
return r263749;
}
double f(double x, double y, double z) {
double r263750 = 1.0;
double r263751 = x;
double r263752 = r263750 / r263751;
double r263753 = -2.203278466232565e-05;
bool r263754 = r263752 <= r263753;
double r263755 = 1.4773374456840607e-203;
bool r263756 = r263752 <= r263755;
double r263757 = !r263756;
bool r263758 = r263754 || r263757;
double r263759 = z;
double r263760 = fma(r263759, r263759, r263750);
double r263761 = r263760 * r263751;
double r263762 = r263750 / r263761;
double r263763 = y;
double r263764 = r263762 / r263763;
double r263765 = 1.0;
double r263766 = r263765 / r263760;
double r263767 = r263750 / r263763;
double r263768 = r263767 / r263751;
double r263769 = r263766 * r263768;
double r263770 = r263758 ? r263764 : r263769;
return r263770;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 6.4 |
|---|---|
| Target | 5.7 |
| Herbie | 5.2 |
if (/ 1.0 x) < -2.203278466232565e-05 or 1.4773374456840607e-203 < (/ 1.0 x) Initial program 9.4
Simplified7.4
rmApplied div-inv7.4
Applied associate-/l*7.5
Simplified7.4
if -2.203278466232565e-05 < (/ 1.0 x) < 1.4773374456840607e-203Initial program 1.2
Simplified3.9
rmApplied div-inv3.9
Applied associate-/l*4.2
Simplified4.2
rmApplied *-un-lft-identity4.2
Applied *-un-lft-identity4.2
Applied times-frac3.9
Applied times-frac1.2
Simplified1.2
Simplified1.2
Final simplification5.2
herbie shell --seed 2020100 +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)))))