Average Error: 7.0 → 6.5
Time: 38.5s
Precision: 64
\[\frac{\frac{1.0}{x}}{y \cdot \left(1.0 + z \cdot z\right)}\]
\[\left(\frac{\sqrt[3]{\frac{1.0}{x}}}{\sqrt[3]{y}} \cdot \frac{\sqrt[3]{\frac{1.0}{x}}}{\sqrt[3]{y}}\right) \cdot \frac{\frac{\sqrt[3]{\frac{1.0}{x}}}{\sqrt[3]{y}}}{\mathsf{fma}\left(z, z, 1.0\right)}\]
\frac{\frac{1.0}{x}}{y \cdot \left(1.0 + z \cdot z\right)}
\left(\frac{\sqrt[3]{\frac{1.0}{x}}}{\sqrt[3]{y}} \cdot \frac{\sqrt[3]{\frac{1.0}{x}}}{\sqrt[3]{y}}\right) \cdot \frac{\frac{\sqrt[3]{\frac{1.0}{x}}}{\sqrt[3]{y}}}{\mathsf{fma}\left(z, z, 1.0\right)}
double f(double x, double y, double z) {
        double r5580423 = 1.0;
        double r5580424 = x;
        double r5580425 = r5580423 / r5580424;
        double r5580426 = y;
        double r5580427 = z;
        double r5580428 = r5580427 * r5580427;
        double r5580429 = r5580423 + r5580428;
        double r5580430 = r5580426 * r5580429;
        double r5580431 = r5580425 / r5580430;
        return r5580431;
}

double f(double x, double y, double z) {
        double r5580432 = 1.0;
        double r5580433 = x;
        double r5580434 = r5580432 / r5580433;
        double r5580435 = cbrt(r5580434);
        double r5580436 = y;
        double r5580437 = cbrt(r5580436);
        double r5580438 = r5580435 / r5580437;
        double r5580439 = r5580438 * r5580438;
        double r5580440 = z;
        double r5580441 = fma(r5580440, r5580440, r5580432);
        double r5580442 = r5580438 / r5580441;
        double r5580443 = r5580439 * r5580442;
        return r5580443;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Target

Original7.0
Target6.2
Herbie6.5
\[\begin{array}{l} \mathbf{if}\;y \cdot \left(1.0 + z \cdot z\right) \lt -\infty:\\ \;\;\;\;\frac{\frac{1.0}{y}}{\left(1.0 + z \cdot z\right) \cdot x}\\ \mathbf{elif}\;y \cdot \left(1.0 + z \cdot z\right) \lt 8.680743250567252 \cdot 10^{+305}:\\ \;\;\;\;\frac{\frac{1.0}{x}}{\left(1.0 + z \cdot z\right) \cdot y}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{1.0}{y}}{\left(1.0 + z \cdot z\right) \cdot x}\\ \end{array}\]

Derivation

  1. Initial program 7.0

    \[\frac{\frac{1.0}{x}}{y \cdot \left(1.0 + z \cdot z\right)}\]
  2. Simplified6.8

    \[\leadsto \color{blue}{\frac{\frac{\frac{1.0}{x}}{y}}{\mathsf{fma}\left(z, z, 1.0\right)}}\]
  3. Using strategy rm
  4. Applied *-un-lft-identity6.8

    \[\leadsto \frac{\frac{\frac{1.0}{x}}{y}}{\color{blue}{1 \cdot \mathsf{fma}\left(z, z, 1.0\right)}}\]
  5. Applied add-cube-cbrt7.4

    \[\leadsto \frac{\frac{\frac{1.0}{x}}{\color{blue}{\left(\sqrt[3]{y} \cdot \sqrt[3]{y}\right) \cdot \sqrt[3]{y}}}}{1 \cdot \mathsf{fma}\left(z, z, 1.0\right)}\]
  6. Applied add-cube-cbrt7.6

    \[\leadsto \frac{\frac{\color{blue}{\left(\sqrt[3]{\frac{1.0}{x}} \cdot \sqrt[3]{\frac{1.0}{x}}\right) \cdot \sqrt[3]{\frac{1.0}{x}}}}{\left(\sqrt[3]{y} \cdot \sqrt[3]{y}\right) \cdot \sqrt[3]{y}}}{1 \cdot \mathsf{fma}\left(z, z, 1.0\right)}\]
  7. Applied times-frac7.6

    \[\leadsto \frac{\color{blue}{\frac{\sqrt[3]{\frac{1.0}{x}} \cdot \sqrt[3]{\frac{1.0}{x}}}{\sqrt[3]{y} \cdot \sqrt[3]{y}} \cdot \frac{\sqrt[3]{\frac{1.0}{x}}}{\sqrt[3]{y}}}}{1 \cdot \mathsf{fma}\left(z, z, 1.0\right)}\]
  8. Applied times-frac6.5

    \[\leadsto \color{blue}{\frac{\frac{\sqrt[3]{\frac{1.0}{x}} \cdot \sqrt[3]{\frac{1.0}{x}}}{\sqrt[3]{y} \cdot \sqrt[3]{y}}}{1} \cdot \frac{\frac{\sqrt[3]{\frac{1.0}{x}}}{\sqrt[3]{y}}}{\mathsf{fma}\left(z, z, 1.0\right)}}\]
  9. Simplified6.5

    \[\leadsto \color{blue}{\left(\frac{\sqrt[3]{\frac{1.0}{x}}}{\sqrt[3]{y}} \cdot \frac{\sqrt[3]{\frac{1.0}{x}}}{\sqrt[3]{y}}\right)} \cdot \frac{\frac{\sqrt[3]{\frac{1.0}{x}}}{\sqrt[3]{y}}}{\mathsf{fma}\left(z, z, 1.0\right)}\]
  10. Final simplification6.5

    \[\leadsto \left(\frac{\sqrt[3]{\frac{1.0}{x}}}{\sqrt[3]{y}} \cdot \frac{\sqrt[3]{\frac{1.0}{x}}}{\sqrt[3]{y}}\right) \cdot \frac{\frac{\sqrt[3]{\frac{1.0}{x}}}{\sqrt[3]{y}}}{\mathsf{fma}\left(z, z, 1.0\right)}\]

Reproduce

herbie shell --seed 2019156 +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)))))