Average Error: 6.4 → 3.8
Time: 57.2s
Precision: 64
\[\frac{\frac{1.0}{x}}{y \cdot \left(1.0 + z \cdot z\right)}\]
\[\begin{array}{l} \mathbf{if}\;z \le -1.354892073804187 \cdot 10^{+154}:\\ \;\;\;\;\frac{\frac{1.0}{x}}{\left(z \cdot y\right) \cdot z}\\ \mathbf{elif}\;z \le 2.6747934537368154 \cdot 10^{+119}:\\ \;\;\;\;1.0 \cdot \frac{\frac{\frac{1}{x}}{z \cdot z + 1.0}}{y}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{1.0}{x}}{\left(z \cdot y\right) \cdot z}\\ \end{array}\]
\frac{\frac{1.0}{x}}{y \cdot \left(1.0 + z \cdot z\right)}
\begin{array}{l}
\mathbf{if}\;z \le -1.354892073804187 \cdot 10^{+154}:\\
\;\;\;\;\frac{\frac{1.0}{x}}{\left(z \cdot y\right) \cdot z}\\

\mathbf{elif}\;z \le 2.6747934537368154 \cdot 10^{+119}:\\
\;\;\;\;1.0 \cdot \frac{\frac{\frac{1}{x}}{z \cdot z + 1.0}}{y}\\

\mathbf{else}:\\
\;\;\;\;\frac{\frac{1.0}{x}}{\left(z \cdot y\right) \cdot z}\\

\end{array}
double f(double x, double y, double z) {
        double r15666422 = 1.0;
        double r15666423 = x;
        double r15666424 = r15666422 / r15666423;
        double r15666425 = y;
        double r15666426 = z;
        double r15666427 = r15666426 * r15666426;
        double r15666428 = r15666422 + r15666427;
        double r15666429 = r15666425 * r15666428;
        double r15666430 = r15666424 / r15666429;
        return r15666430;
}

double f(double x, double y, double z) {
        double r15666431 = z;
        double r15666432 = -1.354892073804187e+154;
        bool r15666433 = r15666431 <= r15666432;
        double r15666434 = 1.0;
        double r15666435 = x;
        double r15666436 = r15666434 / r15666435;
        double r15666437 = y;
        double r15666438 = r15666431 * r15666437;
        double r15666439 = r15666438 * r15666431;
        double r15666440 = r15666436 / r15666439;
        double r15666441 = 2.6747934537368154e+119;
        bool r15666442 = r15666431 <= r15666441;
        double r15666443 = 1.0;
        double r15666444 = r15666443 / r15666435;
        double r15666445 = r15666431 * r15666431;
        double r15666446 = r15666445 + r15666434;
        double r15666447 = r15666444 / r15666446;
        double r15666448 = r15666447 / r15666437;
        double r15666449 = r15666434 * r15666448;
        double r15666450 = r15666442 ? r15666449 : r15666440;
        double r15666451 = r15666433 ? r15666440 : r15666450;
        return r15666451;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original6.4
Target5.8
Herbie3.8
\[\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. Split input into 2 regimes
  2. if z < -1.354892073804187e+154 or 2.6747934537368154e+119 < z

    1. Initial program 17.4

      \[\frac{\frac{1.0}{x}}{y \cdot \left(1.0 + z \cdot z\right)}\]
    2. Using strategy rm
    3. Applied div-inv17.4

      \[\leadsto \frac{\color{blue}{1.0 \cdot \frac{1}{x}}}{y \cdot \left(1.0 + z \cdot z\right)}\]
    4. Applied times-frac17.4

      \[\leadsto \color{blue}{\frac{1.0}{y} \cdot \frac{\frac{1}{x}}{1.0 + z \cdot z}}\]
    5. Taylor expanded around inf 17.4

      \[\leadsto \color{blue}{\frac{1.0}{x \cdot \left({z}^{2} \cdot y\right)}}\]
    6. Simplified8.5

      \[\leadsto \color{blue}{\frac{\frac{1.0}{x}}{\left(y \cdot z\right) \cdot z}}\]

    if -1.354892073804187e+154 < z < 2.6747934537368154e+119

    1. Initial program 1.7

      \[\frac{\frac{1.0}{x}}{y \cdot \left(1.0 + z \cdot z\right)}\]
    2. Using strategy rm
    3. Applied div-inv1.7

      \[\leadsto \frac{\color{blue}{1.0 \cdot \frac{1}{x}}}{y \cdot \left(1.0 + z \cdot z\right)}\]
    4. Applied times-frac1.9

      \[\leadsto \color{blue}{\frac{1.0}{y} \cdot \frac{\frac{1}{x}}{1.0 + z \cdot z}}\]
    5. Using strategy rm
    6. Applied add-sqr-sqrt1.9

      \[\leadsto \frac{1.0}{y} \cdot \frac{\frac{1}{x}}{\color{blue}{\sqrt{1.0 + z \cdot z} \cdot \sqrt{1.0 + z \cdot z}}}\]
    7. Applied associate-/r*1.9

      \[\leadsto \frac{1.0}{y} \cdot \color{blue}{\frac{\frac{\frac{1}{x}}{\sqrt{1.0 + z \cdot z}}}{\sqrt{1.0 + z \cdot z}}}\]
    8. Using strategy rm
    9. Applied div-inv1.9

      \[\leadsto \color{blue}{\left(1.0 \cdot \frac{1}{y}\right)} \cdot \frac{\frac{\frac{1}{x}}{\sqrt{1.0 + z \cdot z}}}{\sqrt{1.0 + z \cdot z}}\]
    10. Applied associate-*l*1.9

      \[\leadsto \color{blue}{1.0 \cdot \left(\frac{1}{y} \cdot \frac{\frac{\frac{1}{x}}{\sqrt{1.0 + z \cdot z}}}{\sqrt{1.0 + z \cdot z}}\right)}\]
    11. Simplified1.8

      \[\leadsto 1.0 \cdot \color{blue}{\frac{\frac{\frac{1}{x}}{z \cdot z + 1.0}}{y}}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification3.8

    \[\leadsto \begin{array}{l} \mathbf{if}\;z \le -1.354892073804187 \cdot 10^{+154}:\\ \;\;\;\;\frac{\frac{1.0}{x}}{\left(z \cdot y\right) \cdot z}\\ \mathbf{elif}\;z \le 2.6747934537368154 \cdot 10^{+119}:\\ \;\;\;\;1.0 \cdot \frac{\frac{\frac{1}{x}}{z \cdot z + 1.0}}{y}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{1.0}{x}}{\left(z \cdot y\right) \cdot z}\\ \end{array}\]

Reproduce

herbie shell --seed 2019164 
(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)))))