\frac{\frac{1.0}{x}}{y \cdot \left(1.0 + z \cdot z\right)}\frac{\frac{\frac{\sqrt[3]{1.0}}{\sqrt[3]{x}}}{\sqrt[3]{\mathsf{fma}\left(z, z, 1.0\right)}}}{\sqrt[3]{y}} \cdot \left(\frac{\frac{\frac{\sqrt[3]{1.0}}{\sqrt[3]{x}}}{\sqrt[3]{\mathsf{fma}\left(z, z, 1.0\right)}}}{\sqrt[3]{y}} \cdot \frac{\frac{\frac{\sqrt[3]{1.0}}{\sqrt[3]{x}}}{\sqrt[3]{\mathsf{fma}\left(z, z, 1.0\right)}}}{\sqrt[3]{y}}\right)double f(double x, double y, double z) {
double r17288762 = 1.0;
double r17288763 = x;
double r17288764 = r17288762 / r17288763;
double r17288765 = y;
double r17288766 = z;
double r17288767 = r17288766 * r17288766;
double r17288768 = r17288762 + r17288767;
double r17288769 = r17288765 * r17288768;
double r17288770 = r17288764 / r17288769;
return r17288770;
}
double f(double x, double y, double z) {
double r17288771 = 1.0;
double r17288772 = cbrt(r17288771);
double r17288773 = x;
double r17288774 = cbrt(r17288773);
double r17288775 = r17288772 / r17288774;
double r17288776 = z;
double r17288777 = fma(r17288776, r17288776, r17288771);
double r17288778 = cbrt(r17288777);
double r17288779 = r17288775 / r17288778;
double r17288780 = y;
double r17288781 = cbrt(r17288780);
double r17288782 = r17288779 / r17288781;
double r17288783 = r17288782 * r17288782;
double r17288784 = r17288782 * r17288783;
return r17288784;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 6.9 |
|---|---|
| Target | 6.2 |
| Herbie | 6.4 |
Initial program 6.9
Simplified6.8
rmApplied add-cube-cbrt6.9
Applied add-cube-cbrt7.4
Applied add-cube-cbrt7.6
Applied add-cube-cbrt7.6
Applied times-frac7.6
Applied times-frac7.6
Applied times-frac6.5
Simplified6.4
Simplified6.4
Final simplification6.4
herbie shell --seed 2019158 +o rules:numerics
(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)))))