\frac{\frac{1.0}{x}}{y \cdot \left(1.0 + z \cdot z\right)}\begin{array}{l}
\mathbf{if}\;z \cdot z \le 1.3636091202374743 \cdot 10^{+164}:\\
\;\;\;\;\frac{\frac{\frac{1.0}{z \cdot z + 1.0}}{x}}{y}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{1.0}{x}}{\left(y \cdot z\right) \cdot z}\\
\end{array}double f(double x, double y, double z) {
double r18034319 = 1.0;
double r18034320 = x;
double r18034321 = r18034319 / r18034320;
double r18034322 = y;
double r18034323 = z;
double r18034324 = r18034323 * r18034323;
double r18034325 = r18034319 + r18034324;
double r18034326 = r18034322 * r18034325;
double r18034327 = r18034321 / r18034326;
return r18034327;
}
double f(double x, double y, double z) {
double r18034328 = z;
double r18034329 = r18034328 * r18034328;
double r18034330 = 1.3636091202374743e+164;
bool r18034331 = r18034329 <= r18034330;
double r18034332 = 1.0;
double r18034333 = r18034329 + r18034332;
double r18034334 = r18034332 / r18034333;
double r18034335 = x;
double r18034336 = r18034334 / r18034335;
double r18034337 = y;
double r18034338 = r18034336 / r18034337;
double r18034339 = r18034332 / r18034335;
double r18034340 = r18034337 * r18034328;
double r18034341 = r18034340 * r18034328;
double r18034342 = r18034339 / r18034341;
double r18034343 = r18034331 ? r18034338 : r18034342;
return r18034343;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 6.9 |
|---|---|
| Target | 6.2 |
| Herbie | 3.9 |
if (* z z) < 1.3636091202374743e+164Initial program 1.2
rmApplied div-inv1.2
Applied times-frac1.1
rmApplied associate-*l/1.0
Simplified1.1
rmApplied associate-/r*1.0
if 1.3636091202374743e+164 < (* z z) Initial program 15.9
Taylor expanded around inf 16.0
Simplified8.4
Final simplification3.9
herbie shell --seed 2019158
(FPCore (x y z)
:name "Statistics.Distribution.CauchyLorentz:$cdensity from math-functions-0.1.5.2"
:herbie-target
(if (< (* y (+ 1.0 (* z z))) -inf.0) (/ (/ 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)))))