Statistics.Distribution.CauchyLorentz:$cdensity from math-functions-0.1.5.2

Percentage Accurate: 88.3% → 97.3%
Time: 10.3s
Alternatives: 10
Speedup: 0.9×

Specification

?
\[\begin{array}{l} \\ \frac{\frac{1}{x}}{y \cdot \left(1 + z \cdot z\right)} \end{array} \]
(FPCore (x y z) :precision binary64 (/ (/ 1.0 x) (* y (+ 1.0 (* z z)))))
double code(double x, double y, double z) {
	return (1.0 / x) / (y * (1.0 + (z * z)));
}
real(8) function code(x, y, z)
    real(8), intent (in) :: x
    real(8), intent (in) :: y
    real(8), intent (in) :: z
    code = (1.0d0 / x) / (y * (1.0d0 + (z * z)))
end function
public static double code(double x, double y, double z) {
	return (1.0 / x) / (y * (1.0 + (z * z)));
}
def code(x, y, z):
	return (1.0 / x) / (y * (1.0 + (z * z)))
function code(x, y, z)
	return Float64(Float64(1.0 / x) / Float64(y * Float64(1.0 + Float64(z * z))))
end
function tmp = code(x, y, z)
	tmp = (1.0 / x) / (y * (1.0 + (z * z)));
end
code[x_, y_, z_] := N[(N[(1.0 / x), $MachinePrecision] / N[(y * N[(1.0 + N[(z * z), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}

\\
\frac{\frac{1}{x}}{y \cdot \left(1 + z \cdot z\right)}
\end{array}

Sampling outcomes in binary64 precision:

Local Percentage Accuracy vs ?

The average percentage accuracy by input value. Horizontal axis shows value of an input variable; the variable is choosen in the title. Vertical axis is accuracy; higher is better. Red represent the original program, while blue represents Herbie's suggestion. These can be toggled with buttons below the plot. The line is an average while dots represent individual samples.

Accuracy vs Speed?

Herbie found 10 alternatives:

AlternativeAccuracySpeedup
The accuracy (vertical axis) and speed (horizontal axis) of each alternatives. Up and to the right is better. The red square shows the initial program, and each blue circle shows an alternative.The line shows the best available speed-accuracy tradeoffs.

Initial Program: 88.3% accurate, 1.0× speedup?

\[\begin{array}{l} \\ \frac{\frac{1}{x}}{y \cdot \left(1 + z \cdot z\right)} \end{array} \]
(FPCore (x y z) :precision binary64 (/ (/ 1.0 x) (* y (+ 1.0 (* z z)))))
double code(double x, double y, double z) {
	return (1.0 / x) / (y * (1.0 + (z * z)));
}
real(8) function code(x, y, z)
    real(8), intent (in) :: x
    real(8), intent (in) :: y
    real(8), intent (in) :: z
    code = (1.0d0 / x) / (y * (1.0d0 + (z * z)))
end function
public static double code(double x, double y, double z) {
	return (1.0 / x) / (y * (1.0 + (z * z)));
}
def code(x, y, z):
	return (1.0 / x) / (y * (1.0 + (z * z)))
function code(x, y, z)
	return Float64(Float64(1.0 / x) / Float64(y * Float64(1.0 + Float64(z * z))))
end
function tmp = code(x, y, z)
	tmp = (1.0 / x) / (y * (1.0 + (z * z)));
end
code[x_, y_, z_] := N[(N[(1.0 / x), $MachinePrecision] / N[(y * N[(1.0 + N[(z * z), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}

\\
\frac{\frac{1}{x}}{y \cdot \left(1 + z \cdot z\right)}
\end{array}

Alternative 1: 97.3% accurate, 0.9× speedup?

\[\begin{array}{l} y\_m = \left|y\right| \\ y\_s = \mathsf{copysign}\left(1, y\right) \\ x\_m = \left|x\right| \\ x\_s = \mathsf{copysign}\left(1, x\right) \\ [x_m, y_m, z] = \mathsf{sort}([x_m, y_m, z])\\ \\ x\_s \cdot \left(y\_s \cdot \begin{array}{l} \mathbf{if}\;z \cdot z \leq 2 \cdot 10^{-10}:\\ \;\;\;\;\frac{\mathsf{fma}\left(-z, z, 1\right)}{x\_m \cdot y\_m}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{\left(\left(x\_m \cdot z\right) \cdot y\_m\right) \cdot z}\\ \end{array}\right) \end{array} \]
y\_m = (fabs.f64 y)
y\_s = (copysign.f64 #s(literal 1 binary64) y)
x\_m = (fabs.f64 x)
x\_s = (copysign.f64 #s(literal 1 binary64) x)
NOTE: x_m, y_m, and z should be sorted in increasing order before calling this function.
(FPCore (x_s y_s x_m y_m z)
 :precision binary64
 (*
  x_s
  (*
   y_s
   (if (<= (* z z) 2e-10)
     (/ (fma (- z) z 1.0) (* x_m y_m))
     (/ 1.0 (* (* (* x_m z) y_m) z))))))
y\_m = fabs(y);
y\_s = copysign(1.0, y);
x\_m = fabs(x);
x\_s = copysign(1.0, x);
assert(x_m < y_m && y_m < z);
double code(double x_s, double y_s, double x_m, double y_m, double z) {
	double tmp;
	if ((z * z) <= 2e-10) {
		tmp = fma(-z, z, 1.0) / (x_m * y_m);
	} else {
		tmp = 1.0 / (((x_m * z) * y_m) * z);
	}
	return x_s * (y_s * tmp);
}
y\_m = abs(y)
y\_s = copysign(1.0, y)
x\_m = abs(x)
x\_s = copysign(1.0, x)
x_m, y_m, z = sort([x_m, y_m, z])
function code(x_s, y_s, x_m, y_m, z)
	tmp = 0.0
	if (Float64(z * z) <= 2e-10)
		tmp = Float64(fma(Float64(-z), z, 1.0) / Float64(x_m * y_m));
	else
		tmp = Float64(1.0 / Float64(Float64(Float64(x_m * z) * y_m) * z));
	end
	return Float64(x_s * Float64(y_s * tmp))
end
y\_m = N[Abs[y], $MachinePrecision]
y\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[y]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
x\_m = N[Abs[x], $MachinePrecision]
x\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[x]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
NOTE: x_m, y_m, and z should be sorted in increasing order before calling this function.
code[x$95$s_, y$95$s_, x$95$m_, y$95$m_, z_] := N[(x$95$s * N[(y$95$s * If[LessEqual[N[(z * z), $MachinePrecision], 2e-10], N[(N[((-z) * z + 1.0), $MachinePrecision] / N[(x$95$m * y$95$m), $MachinePrecision]), $MachinePrecision], N[(1.0 / N[(N[(N[(x$95$m * z), $MachinePrecision] * y$95$m), $MachinePrecision] * z), $MachinePrecision]), $MachinePrecision]]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
y\_m = \left|y\right|
\\
y\_s = \mathsf{copysign}\left(1, y\right)
\\
x\_m = \left|x\right|
\\
x\_s = \mathsf{copysign}\left(1, x\right)
\\
[x_m, y_m, z] = \mathsf{sort}([x_m, y_m, z])\\
\\
x\_s \cdot \left(y\_s \cdot \begin{array}{l}
\mathbf{if}\;z \cdot z \leq 2 \cdot 10^{-10}:\\
\;\;\;\;\frac{\mathsf{fma}\left(-z, z, 1\right)}{x\_m \cdot y\_m}\\

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


\end{array}\right)
\end{array}
Derivation
  1. Split input into 2 regimes
  2. if (*.f64 z z) < 2.00000000000000007e-10

    1. Initial program 99.6%

      \[\frac{\frac{1}{x}}{y \cdot \left(1 + z \cdot z\right)} \]
    2. Add Preprocessing
    3. Taylor expanded in z around 0

      \[\leadsto \color{blue}{-1 \cdot \frac{{z}^{2}}{x \cdot y} + \frac{1}{x \cdot y}} \]
    4. Step-by-step derivation
      1. +-commutativeN/A

        \[\leadsto \color{blue}{\frac{1}{x \cdot y} + -1 \cdot \frac{{z}^{2}}{x \cdot y}} \]
      2. mul-1-negN/A

        \[\leadsto \frac{1}{x \cdot y} + \color{blue}{\left(\mathsf{neg}\left(\frac{{z}^{2}}{x \cdot y}\right)\right)} \]
      3. unsub-negN/A

        \[\leadsto \color{blue}{\frac{1}{x \cdot y} - \frac{{z}^{2}}{x \cdot y}} \]
      4. div-subN/A

        \[\leadsto \color{blue}{\frac{1 - {z}^{2}}{x \cdot y}} \]
      5. sub-negN/A

        \[\leadsto \frac{\color{blue}{1 + \left(\mathsf{neg}\left({z}^{2}\right)\right)}}{x \cdot y} \]
      6. mul-1-negN/A

        \[\leadsto \frac{1 + \color{blue}{-1 \cdot {z}^{2}}}{x \cdot y} \]
      7. +-commutativeN/A

        \[\leadsto \frac{\color{blue}{-1 \cdot {z}^{2} + 1}}{x \cdot y} \]
      8. lower-/.f64N/A

        \[\leadsto \color{blue}{\frac{-1 \cdot {z}^{2} + 1}{x \cdot y}} \]
      9. unpow2N/A

        \[\leadsto \frac{-1 \cdot \color{blue}{\left(z \cdot z\right)} + 1}{x \cdot y} \]
      10. associate-*r*N/A

        \[\leadsto \frac{\color{blue}{\left(-1 \cdot z\right) \cdot z} + 1}{x \cdot y} \]
      11. lower-fma.f64N/A

        \[\leadsto \frac{\color{blue}{\mathsf{fma}\left(-1 \cdot z, z, 1\right)}}{x \cdot y} \]
      12. mul-1-negN/A

        \[\leadsto \frac{\mathsf{fma}\left(\color{blue}{\mathsf{neg}\left(z\right)}, z, 1\right)}{x \cdot y} \]
      13. lower-neg.f64N/A

        \[\leadsto \frac{\mathsf{fma}\left(\color{blue}{-z}, z, 1\right)}{x \cdot y} \]
      14. *-commutativeN/A

        \[\leadsto \frac{\mathsf{fma}\left(-z, z, 1\right)}{\color{blue}{y \cdot x}} \]
      15. lower-*.f6499.6

        \[\leadsto \frac{\mathsf{fma}\left(-z, z, 1\right)}{\color{blue}{y \cdot x}} \]
    5. Applied rewrites99.6%

      \[\leadsto \color{blue}{\frac{\mathsf{fma}\left(-z, z, 1\right)}{y \cdot x}} \]

    if 2.00000000000000007e-10 < (*.f64 z z)

    1. Initial program 85.2%

      \[\frac{\frac{1}{x}}{y \cdot \left(1 + z \cdot z\right)} \]
    2. Add Preprocessing
    3. Step-by-step derivation
      1. lift-/.f64N/A

        \[\leadsto \frac{\color{blue}{\frac{1}{x}}}{y \cdot \left(1 + z \cdot z\right)} \]
      2. inv-powN/A

        \[\leadsto \frac{\color{blue}{{x}^{-1}}}{y \cdot \left(1 + z \cdot z\right)} \]
      3. sqr-powN/A

        \[\leadsto \frac{\color{blue}{{x}^{\left(\frac{-1}{2}\right)} \cdot {x}^{\left(\frac{-1}{2}\right)}}}{y \cdot \left(1 + z \cdot z\right)} \]
      4. pow2N/A

        \[\leadsto \frac{\color{blue}{{\left({x}^{\left(\frac{-1}{2}\right)}\right)}^{2}}}{y \cdot \left(1 + z \cdot z\right)} \]
      5. lower-pow.f64N/A

        \[\leadsto \frac{\color{blue}{{\left({x}^{\left(\frac{-1}{2}\right)}\right)}^{2}}}{y \cdot \left(1 + z \cdot z\right)} \]
      6. lower-pow.f64N/A

        \[\leadsto \frac{{\color{blue}{\left({x}^{\left(\frac{-1}{2}\right)}\right)}}^{2}}{y \cdot \left(1 + z \cdot z\right)} \]
      7. metadata-eval41.1

        \[\leadsto \frac{{\left({x}^{\color{blue}{-0.5}}\right)}^{2}}{y \cdot \left(1 + z \cdot z\right)} \]
    4. Applied rewrites41.1%

      \[\leadsto \frac{\color{blue}{{\left({x}^{-0.5}\right)}^{2}}}{y \cdot \left(1 + z \cdot z\right)} \]
    5. Taylor expanded in z around inf

      \[\leadsto \color{blue}{\frac{1}{x \cdot \left(y \cdot {z}^{2}\right)}} \]
    6. Step-by-step derivation
      1. lower-/.f64N/A

        \[\leadsto \color{blue}{\frac{1}{x \cdot \left(y \cdot {z}^{2}\right)}} \]
      2. *-commutativeN/A

        \[\leadsto \frac{1}{\color{blue}{\left(y \cdot {z}^{2}\right) \cdot x}} \]
      3. lower-*.f64N/A

        \[\leadsto \frac{1}{\color{blue}{\left(y \cdot {z}^{2}\right) \cdot x}} \]
      4. *-commutativeN/A

        \[\leadsto \frac{1}{\color{blue}{\left({z}^{2} \cdot y\right)} \cdot x} \]
      5. lower-*.f64N/A

        \[\leadsto \frac{1}{\color{blue}{\left({z}^{2} \cdot y\right)} \cdot x} \]
      6. unpow2N/A

        \[\leadsto \frac{1}{\left(\color{blue}{\left(z \cdot z\right)} \cdot y\right) \cdot x} \]
      7. lower-*.f6485.2

        \[\leadsto \frac{1}{\left(\color{blue}{\left(z \cdot z\right)} \cdot y\right) \cdot x} \]
    7. Applied rewrites85.2%

      \[\leadsto \color{blue}{\frac{1}{\left(\left(z \cdot z\right) \cdot y\right) \cdot x}} \]
    8. Step-by-step derivation
      1. Applied rewrites93.0%

        \[\leadsto \frac{1}{\left(\left(z \cdot x\right) \cdot y\right) \cdot \color{blue}{z}} \]
    9. Recombined 2 regimes into one program.
    10. Final simplification96.1%

      \[\leadsto \begin{array}{l} \mathbf{if}\;z \cdot z \leq 2 \cdot 10^{-10}:\\ \;\;\;\;\frac{\mathsf{fma}\left(-z, z, 1\right)}{x \cdot y}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{\left(\left(x \cdot z\right) \cdot y\right) \cdot z}\\ \end{array} \]
    11. Add Preprocessing

    Alternative 2: 70.3% accurate, 0.5× speedup?

    \[\begin{array}{l} y\_m = \left|y\right| \\ y\_s = \mathsf{copysign}\left(1, y\right) \\ x\_m = \left|x\right| \\ x\_s = \mathsf{copysign}\left(1, x\right) \\ [x_m, y_m, z] = \mathsf{sort}([x_m, y_m, z])\\ \\ x\_s \cdot \left(y\_s \cdot \begin{array}{l} \mathbf{if}\;\frac{\frac{1}{x\_m}}{\left(z \cdot z + 1\right) \cdot y\_m} \leq 0:\\ \;\;\;\;\frac{y\_m}{\left(y\_m \cdot y\_m\right) \cdot x\_m}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{-1}{y\_m}}{-x\_m}\\ \end{array}\right) \end{array} \]
    y\_m = (fabs.f64 y)
    y\_s = (copysign.f64 #s(literal 1 binary64) y)
    x\_m = (fabs.f64 x)
    x\_s = (copysign.f64 #s(literal 1 binary64) x)
    NOTE: x_m, y_m, and z should be sorted in increasing order before calling this function.
    (FPCore (x_s y_s x_m y_m z)
     :precision binary64
     (*
      x_s
      (*
       y_s
       (if (<= (/ (/ 1.0 x_m) (* (+ (* z z) 1.0) y_m)) 0.0)
         (/ y_m (* (* y_m y_m) x_m))
         (/ (/ -1.0 y_m) (- x_m))))))
    y\_m = fabs(y);
    y\_s = copysign(1.0, y);
    x\_m = fabs(x);
    x\_s = copysign(1.0, x);
    assert(x_m < y_m && y_m < z);
    double code(double x_s, double y_s, double x_m, double y_m, double z) {
    	double tmp;
    	if (((1.0 / x_m) / (((z * z) + 1.0) * y_m)) <= 0.0) {
    		tmp = y_m / ((y_m * y_m) * x_m);
    	} else {
    		tmp = (-1.0 / y_m) / -x_m;
    	}
    	return x_s * (y_s * tmp);
    }
    
    y\_m = abs(y)
    y\_s = copysign(1.0d0, y)
    x\_m = abs(x)
    x\_s = copysign(1.0d0, x)
    NOTE: x_m, y_m, and z should be sorted in increasing order before calling this function.
    real(8) function code(x_s, y_s, x_m, y_m, z)
        real(8), intent (in) :: x_s
        real(8), intent (in) :: y_s
        real(8), intent (in) :: x_m
        real(8), intent (in) :: y_m
        real(8), intent (in) :: z
        real(8) :: tmp
        if (((1.0d0 / x_m) / (((z * z) + 1.0d0) * y_m)) <= 0.0d0) then
            tmp = y_m / ((y_m * y_m) * x_m)
        else
            tmp = ((-1.0d0) / y_m) / -x_m
        end if
        code = x_s * (y_s * tmp)
    end function
    
    y\_m = Math.abs(y);
    y\_s = Math.copySign(1.0, y);
    x\_m = Math.abs(x);
    x\_s = Math.copySign(1.0, x);
    assert x_m < y_m && y_m < z;
    public static double code(double x_s, double y_s, double x_m, double y_m, double z) {
    	double tmp;
    	if (((1.0 / x_m) / (((z * z) + 1.0) * y_m)) <= 0.0) {
    		tmp = y_m / ((y_m * y_m) * x_m);
    	} else {
    		tmp = (-1.0 / y_m) / -x_m;
    	}
    	return x_s * (y_s * tmp);
    }
    
    y\_m = math.fabs(y)
    y\_s = math.copysign(1.0, y)
    x\_m = math.fabs(x)
    x\_s = math.copysign(1.0, x)
    [x_m, y_m, z] = sort([x_m, y_m, z])
    def code(x_s, y_s, x_m, y_m, z):
    	tmp = 0
    	if ((1.0 / x_m) / (((z * z) + 1.0) * y_m)) <= 0.0:
    		tmp = y_m / ((y_m * y_m) * x_m)
    	else:
    		tmp = (-1.0 / y_m) / -x_m
    	return x_s * (y_s * tmp)
    
    y\_m = abs(y)
    y\_s = copysign(1.0, y)
    x\_m = abs(x)
    x\_s = copysign(1.0, x)
    x_m, y_m, z = sort([x_m, y_m, z])
    function code(x_s, y_s, x_m, y_m, z)
    	tmp = 0.0
    	if (Float64(Float64(1.0 / x_m) / Float64(Float64(Float64(z * z) + 1.0) * y_m)) <= 0.0)
    		tmp = Float64(y_m / Float64(Float64(y_m * y_m) * x_m));
    	else
    		tmp = Float64(Float64(-1.0 / y_m) / Float64(-x_m));
    	end
    	return Float64(x_s * Float64(y_s * tmp))
    end
    
    y\_m = abs(y);
    y\_s = sign(y) * abs(1.0);
    x\_m = abs(x);
    x\_s = sign(x) * abs(1.0);
    x_m, y_m, z = num2cell(sort([x_m, y_m, z])){:}
    function tmp_2 = code(x_s, y_s, x_m, y_m, z)
    	tmp = 0.0;
    	if (((1.0 / x_m) / (((z * z) + 1.0) * y_m)) <= 0.0)
    		tmp = y_m / ((y_m * y_m) * x_m);
    	else
    		tmp = (-1.0 / y_m) / -x_m;
    	end
    	tmp_2 = x_s * (y_s * tmp);
    end
    
    y\_m = N[Abs[y], $MachinePrecision]
    y\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[y]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
    x\_m = N[Abs[x], $MachinePrecision]
    x\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[x]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
    NOTE: x_m, y_m, and z should be sorted in increasing order before calling this function.
    code[x$95$s_, y$95$s_, x$95$m_, y$95$m_, z_] := N[(x$95$s * N[(y$95$s * If[LessEqual[N[(N[(1.0 / x$95$m), $MachinePrecision] / N[(N[(N[(z * z), $MachinePrecision] + 1.0), $MachinePrecision] * y$95$m), $MachinePrecision]), $MachinePrecision], 0.0], N[(y$95$m / N[(N[(y$95$m * y$95$m), $MachinePrecision] * x$95$m), $MachinePrecision]), $MachinePrecision], N[(N[(-1.0 / y$95$m), $MachinePrecision] / (-x$95$m)), $MachinePrecision]]), $MachinePrecision]), $MachinePrecision]
    
    \begin{array}{l}
    y\_m = \left|y\right|
    \\
    y\_s = \mathsf{copysign}\left(1, y\right)
    \\
    x\_m = \left|x\right|
    \\
    x\_s = \mathsf{copysign}\left(1, x\right)
    \\
    [x_m, y_m, z] = \mathsf{sort}([x_m, y_m, z])\\
    \\
    x\_s \cdot \left(y\_s \cdot \begin{array}{l}
    \mathbf{if}\;\frac{\frac{1}{x\_m}}{\left(z \cdot z + 1\right) \cdot y\_m} \leq 0:\\
    \;\;\;\;\frac{y\_m}{\left(y\_m \cdot y\_m\right) \cdot x\_m}\\
    
    \mathbf{else}:\\
    \;\;\;\;\frac{\frac{-1}{y\_m}}{-x\_m}\\
    
    
    \end{array}\right)
    \end{array}
    
    Derivation
    1. Split input into 2 regimes
    2. if (/.f64 (/.f64 #s(literal 1 binary64) x) (*.f64 y (+.f64 #s(literal 1 binary64) (*.f64 z z)))) < 0.0

      1. Initial program 88.1%

        \[\frac{\frac{1}{x}}{y \cdot \left(1 + z \cdot z\right)} \]
      2. Add Preprocessing
      3. Taylor expanded in z around 0

        \[\leadsto \color{blue}{\frac{1}{x \cdot y}} \]
      4. Step-by-step derivation
        1. lower-/.f64N/A

          \[\leadsto \color{blue}{\frac{1}{x \cdot y}} \]
        2. *-commutativeN/A

          \[\leadsto \frac{1}{\color{blue}{y \cdot x}} \]
        3. lower-*.f6449.1

          \[\leadsto \frac{1}{\color{blue}{y \cdot x}} \]
      5. Applied rewrites49.1%

        \[\leadsto \color{blue}{\frac{1}{y \cdot x}} \]
      6. Step-by-step derivation
        1. Applied rewrites50.2%

          \[\leadsto \frac{\frac{-1}{x}}{-y \cdot y} \cdot \color{blue}{y} \]
        2. Step-by-step derivation
          1. Applied rewrites50.1%

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

          if 0.0 < (/.f64 (/.f64 #s(literal 1 binary64) x) (*.f64 y (+.f64 #s(literal 1 binary64) (*.f64 z z))))

          1. Initial program 99.5%

            \[\frac{\frac{1}{x}}{y \cdot \left(1 + z \cdot z\right)} \]
          2. Add Preprocessing
          3. Taylor expanded in z around 0

            \[\leadsto \color{blue}{\frac{1}{x \cdot y}} \]
          4. Step-by-step derivation
            1. lower-/.f64N/A

              \[\leadsto \color{blue}{\frac{1}{x \cdot y}} \]
            2. *-commutativeN/A

              \[\leadsto \frac{1}{\color{blue}{y \cdot x}} \]
            3. lower-*.f6477.1

              \[\leadsto \frac{1}{\color{blue}{y \cdot x}} \]
          5. Applied rewrites77.1%

            \[\leadsto \color{blue}{\frac{1}{y \cdot x}} \]
          6. Step-by-step derivation
            1. Applied rewrites77.4%

              \[\leadsto \frac{\frac{-1}{y}}{\color{blue}{-x}} \]
          7. Recombined 2 regimes into one program.
          8. Final simplification59.6%

            \[\leadsto \begin{array}{l} \mathbf{if}\;\frac{\frac{1}{x}}{\left(z \cdot z + 1\right) \cdot y} \leq 0:\\ \;\;\;\;\frac{y}{\left(y \cdot y\right) \cdot x}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{-1}{y}}{-x}\\ \end{array} \]
          9. Add Preprocessing

          Alternative 3: 70.0% accurate, 0.6× speedup?

          \[\begin{array}{l} y\_m = \left|y\right| \\ y\_s = \mathsf{copysign}\left(1, y\right) \\ x\_m = \left|x\right| \\ x\_s = \mathsf{copysign}\left(1, x\right) \\ [x_m, y_m, z] = \mathsf{sort}([x_m, y_m, z])\\ \\ x\_s \cdot \left(y\_s \cdot \begin{array}{l} \mathbf{if}\;\frac{\frac{1}{x\_m}}{\left(z \cdot z + 1\right) \cdot y\_m} \leq 0:\\ \;\;\;\;\frac{y\_m}{\left(y\_m \cdot y\_m\right) \cdot x\_m}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{x\_m \cdot y\_m}\\ \end{array}\right) \end{array} \]
          y\_m = (fabs.f64 y)
          y\_s = (copysign.f64 #s(literal 1 binary64) y)
          x\_m = (fabs.f64 x)
          x\_s = (copysign.f64 #s(literal 1 binary64) x)
          NOTE: x_m, y_m, and z should be sorted in increasing order before calling this function.
          (FPCore (x_s y_s x_m y_m z)
           :precision binary64
           (*
            x_s
            (*
             y_s
             (if (<= (/ (/ 1.0 x_m) (* (+ (* z z) 1.0) y_m)) 0.0)
               (/ y_m (* (* y_m y_m) x_m))
               (/ 1.0 (* x_m y_m))))))
          y\_m = fabs(y);
          y\_s = copysign(1.0, y);
          x\_m = fabs(x);
          x\_s = copysign(1.0, x);
          assert(x_m < y_m && y_m < z);
          double code(double x_s, double y_s, double x_m, double y_m, double z) {
          	double tmp;
          	if (((1.0 / x_m) / (((z * z) + 1.0) * y_m)) <= 0.0) {
          		tmp = y_m / ((y_m * y_m) * x_m);
          	} else {
          		tmp = 1.0 / (x_m * y_m);
          	}
          	return x_s * (y_s * tmp);
          }
          
          y\_m = abs(y)
          y\_s = copysign(1.0d0, y)
          x\_m = abs(x)
          x\_s = copysign(1.0d0, x)
          NOTE: x_m, y_m, and z should be sorted in increasing order before calling this function.
          real(8) function code(x_s, y_s, x_m, y_m, z)
              real(8), intent (in) :: x_s
              real(8), intent (in) :: y_s
              real(8), intent (in) :: x_m
              real(8), intent (in) :: y_m
              real(8), intent (in) :: z
              real(8) :: tmp
              if (((1.0d0 / x_m) / (((z * z) + 1.0d0) * y_m)) <= 0.0d0) then
                  tmp = y_m / ((y_m * y_m) * x_m)
              else
                  tmp = 1.0d0 / (x_m * y_m)
              end if
              code = x_s * (y_s * tmp)
          end function
          
          y\_m = Math.abs(y);
          y\_s = Math.copySign(1.0, y);
          x\_m = Math.abs(x);
          x\_s = Math.copySign(1.0, x);
          assert x_m < y_m && y_m < z;
          public static double code(double x_s, double y_s, double x_m, double y_m, double z) {
          	double tmp;
          	if (((1.0 / x_m) / (((z * z) + 1.0) * y_m)) <= 0.0) {
          		tmp = y_m / ((y_m * y_m) * x_m);
          	} else {
          		tmp = 1.0 / (x_m * y_m);
          	}
          	return x_s * (y_s * tmp);
          }
          
          y\_m = math.fabs(y)
          y\_s = math.copysign(1.0, y)
          x\_m = math.fabs(x)
          x\_s = math.copysign(1.0, x)
          [x_m, y_m, z] = sort([x_m, y_m, z])
          def code(x_s, y_s, x_m, y_m, z):
          	tmp = 0
          	if ((1.0 / x_m) / (((z * z) + 1.0) * y_m)) <= 0.0:
          		tmp = y_m / ((y_m * y_m) * x_m)
          	else:
          		tmp = 1.0 / (x_m * y_m)
          	return x_s * (y_s * tmp)
          
          y\_m = abs(y)
          y\_s = copysign(1.0, y)
          x\_m = abs(x)
          x\_s = copysign(1.0, x)
          x_m, y_m, z = sort([x_m, y_m, z])
          function code(x_s, y_s, x_m, y_m, z)
          	tmp = 0.0
          	if (Float64(Float64(1.0 / x_m) / Float64(Float64(Float64(z * z) + 1.0) * y_m)) <= 0.0)
          		tmp = Float64(y_m / Float64(Float64(y_m * y_m) * x_m));
          	else
          		tmp = Float64(1.0 / Float64(x_m * y_m));
          	end
          	return Float64(x_s * Float64(y_s * tmp))
          end
          
          y\_m = abs(y);
          y\_s = sign(y) * abs(1.0);
          x\_m = abs(x);
          x\_s = sign(x) * abs(1.0);
          x_m, y_m, z = num2cell(sort([x_m, y_m, z])){:}
          function tmp_2 = code(x_s, y_s, x_m, y_m, z)
          	tmp = 0.0;
          	if (((1.0 / x_m) / (((z * z) + 1.0) * y_m)) <= 0.0)
          		tmp = y_m / ((y_m * y_m) * x_m);
          	else
          		tmp = 1.0 / (x_m * y_m);
          	end
          	tmp_2 = x_s * (y_s * tmp);
          end
          
          y\_m = N[Abs[y], $MachinePrecision]
          y\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[y]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
          x\_m = N[Abs[x], $MachinePrecision]
          x\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[x]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
          NOTE: x_m, y_m, and z should be sorted in increasing order before calling this function.
          code[x$95$s_, y$95$s_, x$95$m_, y$95$m_, z_] := N[(x$95$s * N[(y$95$s * If[LessEqual[N[(N[(1.0 / x$95$m), $MachinePrecision] / N[(N[(N[(z * z), $MachinePrecision] + 1.0), $MachinePrecision] * y$95$m), $MachinePrecision]), $MachinePrecision], 0.0], N[(y$95$m / N[(N[(y$95$m * y$95$m), $MachinePrecision] * x$95$m), $MachinePrecision]), $MachinePrecision], N[(1.0 / N[(x$95$m * y$95$m), $MachinePrecision]), $MachinePrecision]]), $MachinePrecision]), $MachinePrecision]
          
          \begin{array}{l}
          y\_m = \left|y\right|
          \\
          y\_s = \mathsf{copysign}\left(1, y\right)
          \\
          x\_m = \left|x\right|
          \\
          x\_s = \mathsf{copysign}\left(1, x\right)
          \\
          [x_m, y_m, z] = \mathsf{sort}([x_m, y_m, z])\\
          \\
          x\_s \cdot \left(y\_s \cdot \begin{array}{l}
          \mathbf{if}\;\frac{\frac{1}{x\_m}}{\left(z \cdot z + 1\right) \cdot y\_m} \leq 0:\\
          \;\;\;\;\frac{y\_m}{\left(y\_m \cdot y\_m\right) \cdot x\_m}\\
          
          \mathbf{else}:\\
          \;\;\;\;\frac{1}{x\_m \cdot y\_m}\\
          
          
          \end{array}\right)
          \end{array}
          
          Derivation
          1. Split input into 2 regimes
          2. if (/.f64 (/.f64 #s(literal 1 binary64) x) (*.f64 y (+.f64 #s(literal 1 binary64) (*.f64 z z)))) < 0.0

            1. Initial program 88.1%

              \[\frac{\frac{1}{x}}{y \cdot \left(1 + z \cdot z\right)} \]
            2. Add Preprocessing
            3. Taylor expanded in z around 0

              \[\leadsto \color{blue}{\frac{1}{x \cdot y}} \]
            4. Step-by-step derivation
              1. lower-/.f64N/A

                \[\leadsto \color{blue}{\frac{1}{x \cdot y}} \]
              2. *-commutativeN/A

                \[\leadsto \frac{1}{\color{blue}{y \cdot x}} \]
              3. lower-*.f6449.1

                \[\leadsto \frac{1}{\color{blue}{y \cdot x}} \]
            5. Applied rewrites49.1%

              \[\leadsto \color{blue}{\frac{1}{y \cdot x}} \]
            6. Step-by-step derivation
              1. Applied rewrites50.2%

                \[\leadsto \frac{\frac{-1}{x}}{-y \cdot y} \cdot \color{blue}{y} \]
              2. Step-by-step derivation
                1. Applied rewrites50.1%

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

                if 0.0 < (/.f64 (/.f64 #s(literal 1 binary64) x) (*.f64 y (+.f64 #s(literal 1 binary64) (*.f64 z z))))

                1. Initial program 99.5%

                  \[\frac{\frac{1}{x}}{y \cdot \left(1 + z \cdot z\right)} \]
                2. Add Preprocessing
                3. Taylor expanded in z around 0

                  \[\leadsto \color{blue}{\frac{1}{x \cdot y}} \]
                4. Step-by-step derivation
                  1. lower-/.f64N/A

                    \[\leadsto \color{blue}{\frac{1}{x \cdot y}} \]
                  2. *-commutativeN/A

                    \[\leadsto \frac{1}{\color{blue}{y \cdot x}} \]
                  3. lower-*.f6477.1

                    \[\leadsto \frac{1}{\color{blue}{y \cdot x}} \]
                5. Applied rewrites77.1%

                  \[\leadsto \color{blue}{\frac{1}{y \cdot x}} \]
              3. Recombined 2 regimes into one program.
              4. Final simplification59.5%

                \[\leadsto \begin{array}{l} \mathbf{if}\;\frac{\frac{1}{x}}{\left(z \cdot z + 1\right) \cdot y} \leq 0:\\ \;\;\;\;\frac{y}{\left(y \cdot y\right) \cdot x}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{x \cdot y}\\ \end{array} \]
              5. Add Preprocessing

              Alternative 4: 88.4% accurate, 0.7× speedup?

              \[\begin{array}{l} y\_m = \left|y\right| \\ y\_s = \mathsf{copysign}\left(1, y\right) \\ x\_m = \left|x\right| \\ x\_s = \mathsf{copysign}\left(1, x\right) \\ [x_m, y_m, z] = \mathsf{sort}([x_m, y_m, z])\\ \\ x\_s \cdot \left(y\_s \cdot \begin{array}{l} \mathbf{if}\;\left(z \cdot z + 1\right) \cdot y\_m \leq \infty:\\ \;\;\;\;\frac{\frac{-1}{\mathsf{fma}\left(z, z, 1\right) \cdot y\_m}}{-x\_m}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{\left(\left(x\_m \cdot z\right) \cdot y\_m\right) \cdot z}\\ \end{array}\right) \end{array} \]
              y\_m = (fabs.f64 y)
              y\_s = (copysign.f64 #s(literal 1 binary64) y)
              x\_m = (fabs.f64 x)
              x\_s = (copysign.f64 #s(literal 1 binary64) x)
              NOTE: x_m, y_m, and z should be sorted in increasing order before calling this function.
              (FPCore (x_s y_s x_m y_m z)
               :precision binary64
               (*
                x_s
                (*
                 y_s
                 (if (<= (* (+ (* z z) 1.0) y_m) INFINITY)
                   (/ (/ -1.0 (* (fma z z 1.0) y_m)) (- x_m))
                   (/ 1.0 (* (* (* x_m z) y_m) z))))))
              y\_m = fabs(y);
              y\_s = copysign(1.0, y);
              x\_m = fabs(x);
              x\_s = copysign(1.0, x);
              assert(x_m < y_m && y_m < z);
              double code(double x_s, double y_s, double x_m, double y_m, double z) {
              	double tmp;
              	if ((((z * z) + 1.0) * y_m) <= ((double) INFINITY)) {
              		tmp = (-1.0 / (fma(z, z, 1.0) * y_m)) / -x_m;
              	} else {
              		tmp = 1.0 / (((x_m * z) * y_m) * z);
              	}
              	return x_s * (y_s * tmp);
              }
              
              y\_m = abs(y)
              y\_s = copysign(1.0, y)
              x\_m = abs(x)
              x\_s = copysign(1.0, x)
              x_m, y_m, z = sort([x_m, y_m, z])
              function code(x_s, y_s, x_m, y_m, z)
              	tmp = 0.0
              	if (Float64(Float64(Float64(z * z) + 1.0) * y_m) <= Inf)
              		tmp = Float64(Float64(-1.0 / Float64(fma(z, z, 1.0) * y_m)) / Float64(-x_m));
              	else
              		tmp = Float64(1.0 / Float64(Float64(Float64(x_m * z) * y_m) * z));
              	end
              	return Float64(x_s * Float64(y_s * tmp))
              end
              
              y\_m = N[Abs[y], $MachinePrecision]
              y\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[y]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
              x\_m = N[Abs[x], $MachinePrecision]
              x\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[x]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
              NOTE: x_m, y_m, and z should be sorted in increasing order before calling this function.
              code[x$95$s_, y$95$s_, x$95$m_, y$95$m_, z_] := N[(x$95$s * N[(y$95$s * If[LessEqual[N[(N[(N[(z * z), $MachinePrecision] + 1.0), $MachinePrecision] * y$95$m), $MachinePrecision], Infinity], N[(N[(-1.0 / N[(N[(z * z + 1.0), $MachinePrecision] * y$95$m), $MachinePrecision]), $MachinePrecision] / (-x$95$m)), $MachinePrecision], N[(1.0 / N[(N[(N[(x$95$m * z), $MachinePrecision] * y$95$m), $MachinePrecision] * z), $MachinePrecision]), $MachinePrecision]]), $MachinePrecision]), $MachinePrecision]
              
              \begin{array}{l}
              y\_m = \left|y\right|
              \\
              y\_s = \mathsf{copysign}\left(1, y\right)
              \\
              x\_m = \left|x\right|
              \\
              x\_s = \mathsf{copysign}\left(1, x\right)
              \\
              [x_m, y_m, z] = \mathsf{sort}([x_m, y_m, z])\\
              \\
              x\_s \cdot \left(y\_s \cdot \begin{array}{l}
              \mathbf{if}\;\left(z \cdot z + 1\right) \cdot y\_m \leq \infty:\\
              \;\;\;\;\frac{\frac{-1}{\mathsf{fma}\left(z, z, 1\right) \cdot y\_m}}{-x\_m}\\
              
              \mathbf{else}:\\
              \;\;\;\;\frac{1}{\left(\left(x\_m \cdot z\right) \cdot y\_m\right) \cdot z}\\
              
              
              \end{array}\right)
              \end{array}
              
              Derivation
              1. Split input into 2 regimes
              2. if (*.f64 y (+.f64 #s(literal 1 binary64) (*.f64 z z))) < +inf.0

                1. Initial program 92.1%

                  \[\frac{\frac{1}{x}}{y \cdot \left(1 + z \cdot z\right)} \]
                2. Add Preprocessing
                3. Step-by-step derivation
                  1. lift-/.f64N/A

                    \[\leadsto \color{blue}{\frac{\frac{1}{x}}{y \cdot \left(1 + z \cdot z\right)}} \]
                  2. div-invN/A

                    \[\leadsto \color{blue}{\frac{1}{x} \cdot \frac{1}{y \cdot \left(1 + z \cdot z\right)}} \]
                  3. lift-/.f64N/A

                    \[\leadsto \color{blue}{\frac{1}{x}} \cdot \frac{1}{y \cdot \left(1 + z \cdot z\right)} \]
                  4. frac-2negN/A

                    \[\leadsto \color{blue}{\frac{\mathsf{neg}\left(1\right)}{\mathsf{neg}\left(x\right)}} \cdot \frac{1}{y \cdot \left(1 + z \cdot z\right)} \]
                  5. metadata-evalN/A

                    \[\leadsto \frac{\color{blue}{-1}}{\mathsf{neg}\left(x\right)} \cdot \frac{1}{y \cdot \left(1 + z \cdot z\right)} \]
                  6. associate-*l/N/A

                    \[\leadsto \color{blue}{\frac{-1 \cdot \frac{1}{y \cdot \left(1 + z \cdot z\right)}}{\mathsf{neg}\left(x\right)}} \]
                  7. lower-/.f64N/A

                    \[\leadsto \color{blue}{\frac{-1 \cdot \frac{1}{y \cdot \left(1 + z \cdot z\right)}}{\mathsf{neg}\left(x\right)}} \]
                  8. un-div-invN/A

                    \[\leadsto \frac{\color{blue}{\frac{-1}{y \cdot \left(1 + z \cdot z\right)}}}{\mathsf{neg}\left(x\right)} \]
                  9. lower-/.f64N/A

                    \[\leadsto \frac{\color{blue}{\frac{-1}{y \cdot \left(1 + z \cdot z\right)}}}{\mathsf{neg}\left(x\right)} \]
                  10. lift-+.f64N/A

                    \[\leadsto \frac{\frac{-1}{y \cdot \color{blue}{\left(1 + z \cdot z\right)}}}{\mathsf{neg}\left(x\right)} \]
                  11. +-commutativeN/A

                    \[\leadsto \frac{\frac{-1}{y \cdot \color{blue}{\left(z \cdot z + 1\right)}}}{\mathsf{neg}\left(x\right)} \]
                  12. lift-*.f64N/A

                    \[\leadsto \frac{\frac{-1}{y \cdot \left(\color{blue}{z \cdot z} + 1\right)}}{\mathsf{neg}\left(x\right)} \]
                  13. lower-fma.f64N/A

                    \[\leadsto \frac{\frac{-1}{y \cdot \color{blue}{\mathsf{fma}\left(z, z, 1\right)}}}{\mathsf{neg}\left(x\right)} \]
                  14. lower-neg.f6492.2

                    \[\leadsto \frac{\frac{-1}{y \cdot \mathsf{fma}\left(z, z, 1\right)}}{\color{blue}{-x}} \]
                4. Applied rewrites92.2%

                  \[\leadsto \color{blue}{\frac{\frac{-1}{y \cdot \mathsf{fma}\left(z, z, 1\right)}}{-x}} \]

                if +inf.0 < (*.f64 y (+.f64 #s(literal 1 binary64) (*.f64 z z)))

                1. Initial program 92.1%

                  \[\frac{\frac{1}{x}}{y \cdot \left(1 + z \cdot z\right)} \]
                2. Add Preprocessing
                3. Step-by-step derivation
                  1. lift-/.f64N/A

                    \[\leadsto \frac{\color{blue}{\frac{1}{x}}}{y \cdot \left(1 + z \cdot z\right)} \]
                  2. inv-powN/A

                    \[\leadsto \frac{\color{blue}{{x}^{-1}}}{y \cdot \left(1 + z \cdot z\right)} \]
                  3. sqr-powN/A

                    \[\leadsto \frac{\color{blue}{{x}^{\left(\frac{-1}{2}\right)} \cdot {x}^{\left(\frac{-1}{2}\right)}}}{y \cdot \left(1 + z \cdot z\right)} \]
                  4. pow2N/A

                    \[\leadsto \frac{\color{blue}{{\left({x}^{\left(\frac{-1}{2}\right)}\right)}^{2}}}{y \cdot \left(1 + z \cdot z\right)} \]
                  5. lower-pow.f64N/A

                    \[\leadsto \frac{\color{blue}{{\left({x}^{\left(\frac{-1}{2}\right)}\right)}^{2}}}{y \cdot \left(1 + z \cdot z\right)} \]
                  6. lower-pow.f64N/A

                    \[\leadsto \frac{{\color{blue}{\left({x}^{\left(\frac{-1}{2}\right)}\right)}}^{2}}{y \cdot \left(1 + z \cdot z\right)} \]
                  7. metadata-eval50.1

                    \[\leadsto \frac{{\left({x}^{\color{blue}{-0.5}}\right)}^{2}}{y \cdot \left(1 + z \cdot z\right)} \]
                4. Applied rewrites50.1%

                  \[\leadsto \frac{\color{blue}{{\left({x}^{-0.5}\right)}^{2}}}{y \cdot \left(1 + z \cdot z\right)} \]
                5. Taylor expanded in z around inf

                  \[\leadsto \color{blue}{\frac{1}{x \cdot \left(y \cdot {z}^{2}\right)}} \]
                6. Step-by-step derivation
                  1. lower-/.f64N/A

                    \[\leadsto \color{blue}{\frac{1}{x \cdot \left(y \cdot {z}^{2}\right)}} \]
                  2. *-commutativeN/A

                    \[\leadsto \frac{1}{\color{blue}{\left(y \cdot {z}^{2}\right) \cdot x}} \]
                  3. lower-*.f64N/A

                    \[\leadsto \frac{1}{\color{blue}{\left(y \cdot {z}^{2}\right) \cdot x}} \]
                  4. *-commutativeN/A

                    \[\leadsto \frac{1}{\color{blue}{\left({z}^{2} \cdot y\right)} \cdot x} \]
                  5. lower-*.f64N/A

                    \[\leadsto \frac{1}{\color{blue}{\left({z}^{2} \cdot y\right)} \cdot x} \]
                  6. unpow2N/A

                    \[\leadsto \frac{1}{\left(\color{blue}{\left(z \cdot z\right)} \cdot y\right) \cdot x} \]
                  7. lower-*.f6452.3

                    \[\leadsto \frac{1}{\left(\color{blue}{\left(z \cdot z\right)} \cdot y\right) \cdot x} \]
                7. Applied rewrites52.3%

                  \[\leadsto \color{blue}{\frac{1}{\left(\left(z \cdot z\right) \cdot y\right) \cdot x}} \]
                8. Step-by-step derivation
                  1. Applied rewrites56.4%

                    \[\leadsto \frac{1}{\left(\left(z \cdot x\right) \cdot y\right) \cdot \color{blue}{z}} \]
                9. Recombined 2 regimes into one program.
                10. Final simplification92.2%

                  \[\leadsto \begin{array}{l} \mathbf{if}\;\left(z \cdot z + 1\right) \cdot y \leq \infty:\\ \;\;\;\;\frac{\frac{-1}{\mathsf{fma}\left(z, z, 1\right) \cdot y}}{-x}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{\left(\left(x \cdot z\right) \cdot y\right) \cdot z}\\ \end{array} \]
                11. Add Preprocessing

                Alternative 5: 90.5% accurate, 0.7× speedup?

                \[\begin{array}{l} y\_m = \left|y\right| \\ y\_s = \mathsf{copysign}\left(1, y\right) \\ x\_m = \left|x\right| \\ x\_s = \mathsf{copysign}\left(1, x\right) \\ [x_m, y_m, z] = \mathsf{sort}([x_m, y_m, z])\\ \\ x\_s \cdot \left(y\_s \cdot \begin{array}{l} \mathbf{if}\;\left(z \cdot z + 1\right) \cdot y\_m \leq \infty:\\ \;\;\;\;\frac{\frac{1}{x\_m}}{\mathsf{fma}\left(z \cdot y\_m, z, y\_m\right)}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{\left(\left(x\_m \cdot z\right) \cdot y\_m\right) \cdot z}\\ \end{array}\right) \end{array} \]
                y\_m = (fabs.f64 y)
                y\_s = (copysign.f64 #s(literal 1 binary64) y)
                x\_m = (fabs.f64 x)
                x\_s = (copysign.f64 #s(literal 1 binary64) x)
                NOTE: x_m, y_m, and z should be sorted in increasing order before calling this function.
                (FPCore (x_s y_s x_m y_m z)
                 :precision binary64
                 (*
                  x_s
                  (*
                   y_s
                   (if (<= (* (+ (* z z) 1.0) y_m) INFINITY)
                     (/ (/ 1.0 x_m) (fma (* z y_m) z y_m))
                     (/ 1.0 (* (* (* x_m z) y_m) z))))))
                y\_m = fabs(y);
                y\_s = copysign(1.0, y);
                x\_m = fabs(x);
                x\_s = copysign(1.0, x);
                assert(x_m < y_m && y_m < z);
                double code(double x_s, double y_s, double x_m, double y_m, double z) {
                	double tmp;
                	if ((((z * z) + 1.0) * y_m) <= ((double) INFINITY)) {
                		tmp = (1.0 / x_m) / fma((z * y_m), z, y_m);
                	} else {
                		tmp = 1.0 / (((x_m * z) * y_m) * z);
                	}
                	return x_s * (y_s * tmp);
                }
                
                y\_m = abs(y)
                y\_s = copysign(1.0, y)
                x\_m = abs(x)
                x\_s = copysign(1.0, x)
                x_m, y_m, z = sort([x_m, y_m, z])
                function code(x_s, y_s, x_m, y_m, z)
                	tmp = 0.0
                	if (Float64(Float64(Float64(z * z) + 1.0) * y_m) <= Inf)
                		tmp = Float64(Float64(1.0 / x_m) / fma(Float64(z * y_m), z, y_m));
                	else
                		tmp = Float64(1.0 / Float64(Float64(Float64(x_m * z) * y_m) * z));
                	end
                	return Float64(x_s * Float64(y_s * tmp))
                end
                
                y\_m = N[Abs[y], $MachinePrecision]
                y\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[y]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
                x\_m = N[Abs[x], $MachinePrecision]
                x\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[x]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
                NOTE: x_m, y_m, and z should be sorted in increasing order before calling this function.
                code[x$95$s_, y$95$s_, x$95$m_, y$95$m_, z_] := N[(x$95$s * N[(y$95$s * If[LessEqual[N[(N[(N[(z * z), $MachinePrecision] + 1.0), $MachinePrecision] * y$95$m), $MachinePrecision], Infinity], N[(N[(1.0 / x$95$m), $MachinePrecision] / N[(N[(z * y$95$m), $MachinePrecision] * z + y$95$m), $MachinePrecision]), $MachinePrecision], N[(1.0 / N[(N[(N[(x$95$m * z), $MachinePrecision] * y$95$m), $MachinePrecision] * z), $MachinePrecision]), $MachinePrecision]]), $MachinePrecision]), $MachinePrecision]
                
                \begin{array}{l}
                y\_m = \left|y\right|
                \\
                y\_s = \mathsf{copysign}\left(1, y\right)
                \\
                x\_m = \left|x\right|
                \\
                x\_s = \mathsf{copysign}\left(1, x\right)
                \\
                [x_m, y_m, z] = \mathsf{sort}([x_m, y_m, z])\\
                \\
                x\_s \cdot \left(y\_s \cdot \begin{array}{l}
                \mathbf{if}\;\left(z \cdot z + 1\right) \cdot y\_m \leq \infty:\\
                \;\;\;\;\frac{\frac{1}{x\_m}}{\mathsf{fma}\left(z \cdot y\_m, z, y\_m\right)}\\
                
                \mathbf{else}:\\
                \;\;\;\;\frac{1}{\left(\left(x\_m \cdot z\right) \cdot y\_m\right) \cdot z}\\
                
                
                \end{array}\right)
                \end{array}
                
                Derivation
                1. Split input into 2 regimes
                2. if (*.f64 y (+.f64 #s(literal 1 binary64) (*.f64 z z))) < +inf.0

                  1. Initial program 92.1%

                    \[\frac{\frac{1}{x}}{y \cdot \left(1 + z \cdot z\right)} \]
                  2. Add Preprocessing
                  3. Step-by-step derivation
                    1. lift-*.f64N/A

                      \[\leadsto \frac{\frac{1}{x}}{\color{blue}{y \cdot \left(1 + z \cdot z\right)}} \]
                    2. lift-+.f64N/A

                      \[\leadsto \frac{\frac{1}{x}}{y \cdot \color{blue}{\left(1 + z \cdot z\right)}} \]
                    3. +-commutativeN/A

                      \[\leadsto \frac{\frac{1}{x}}{y \cdot \color{blue}{\left(z \cdot z + 1\right)}} \]
                    4. distribute-lft-inN/A

                      \[\leadsto \frac{\frac{1}{x}}{\color{blue}{y \cdot \left(z \cdot z\right) + y \cdot 1}} \]
                    5. lift-*.f64N/A

                      \[\leadsto \frac{\frac{1}{x}}{y \cdot \color{blue}{\left(z \cdot z\right)} + y \cdot 1} \]
                    6. associate-*r*N/A

                      \[\leadsto \frac{\frac{1}{x}}{\color{blue}{\left(y \cdot z\right) \cdot z} + y \cdot 1} \]
                    7. *-rgt-identityN/A

                      \[\leadsto \frac{\frac{1}{x}}{\left(y \cdot z\right) \cdot z + \color{blue}{y}} \]
                    8. lower-fma.f64N/A

                      \[\leadsto \frac{\frac{1}{x}}{\color{blue}{\mathsf{fma}\left(y \cdot z, z, y\right)}} \]
                    9. lower-*.f6496.8

                      \[\leadsto \frac{\frac{1}{x}}{\mathsf{fma}\left(\color{blue}{y \cdot z}, z, y\right)} \]
                  4. Applied rewrites96.8%

                    \[\leadsto \frac{\frac{1}{x}}{\color{blue}{\mathsf{fma}\left(y \cdot z, z, y\right)}} \]

                  if +inf.0 < (*.f64 y (+.f64 #s(literal 1 binary64) (*.f64 z z)))

                  1. Initial program 92.1%

                    \[\frac{\frac{1}{x}}{y \cdot \left(1 + z \cdot z\right)} \]
                  2. Add Preprocessing
                  3. Step-by-step derivation
                    1. lift-/.f64N/A

                      \[\leadsto \frac{\color{blue}{\frac{1}{x}}}{y \cdot \left(1 + z \cdot z\right)} \]
                    2. inv-powN/A

                      \[\leadsto \frac{\color{blue}{{x}^{-1}}}{y \cdot \left(1 + z \cdot z\right)} \]
                    3. sqr-powN/A

                      \[\leadsto \frac{\color{blue}{{x}^{\left(\frac{-1}{2}\right)} \cdot {x}^{\left(\frac{-1}{2}\right)}}}{y \cdot \left(1 + z \cdot z\right)} \]
                    4. pow2N/A

                      \[\leadsto \frac{\color{blue}{{\left({x}^{\left(\frac{-1}{2}\right)}\right)}^{2}}}{y \cdot \left(1 + z \cdot z\right)} \]
                    5. lower-pow.f64N/A

                      \[\leadsto \frac{\color{blue}{{\left({x}^{\left(\frac{-1}{2}\right)}\right)}^{2}}}{y \cdot \left(1 + z \cdot z\right)} \]
                    6. lower-pow.f64N/A

                      \[\leadsto \frac{{\color{blue}{\left({x}^{\left(\frac{-1}{2}\right)}\right)}}^{2}}{y \cdot \left(1 + z \cdot z\right)} \]
                    7. metadata-eval50.1

                      \[\leadsto \frac{{\left({x}^{\color{blue}{-0.5}}\right)}^{2}}{y \cdot \left(1 + z \cdot z\right)} \]
                  4. Applied rewrites50.1%

                    \[\leadsto \frac{\color{blue}{{\left({x}^{-0.5}\right)}^{2}}}{y \cdot \left(1 + z \cdot z\right)} \]
                  5. Taylor expanded in z around inf

                    \[\leadsto \color{blue}{\frac{1}{x \cdot \left(y \cdot {z}^{2}\right)}} \]
                  6. Step-by-step derivation
                    1. lower-/.f64N/A

                      \[\leadsto \color{blue}{\frac{1}{x \cdot \left(y \cdot {z}^{2}\right)}} \]
                    2. *-commutativeN/A

                      \[\leadsto \frac{1}{\color{blue}{\left(y \cdot {z}^{2}\right) \cdot x}} \]
                    3. lower-*.f64N/A

                      \[\leadsto \frac{1}{\color{blue}{\left(y \cdot {z}^{2}\right) \cdot x}} \]
                    4. *-commutativeN/A

                      \[\leadsto \frac{1}{\color{blue}{\left({z}^{2} \cdot y\right)} \cdot x} \]
                    5. lower-*.f64N/A

                      \[\leadsto \frac{1}{\color{blue}{\left({z}^{2} \cdot y\right)} \cdot x} \]
                    6. unpow2N/A

                      \[\leadsto \frac{1}{\left(\color{blue}{\left(z \cdot z\right)} \cdot y\right) \cdot x} \]
                    7. lower-*.f6452.3

                      \[\leadsto \frac{1}{\left(\color{blue}{\left(z \cdot z\right)} \cdot y\right) \cdot x} \]
                  7. Applied rewrites52.3%

                    \[\leadsto \color{blue}{\frac{1}{\left(\left(z \cdot z\right) \cdot y\right) \cdot x}} \]
                  8. Step-by-step derivation
                    1. Applied rewrites56.4%

                      \[\leadsto \frac{1}{\left(\left(z \cdot x\right) \cdot y\right) \cdot \color{blue}{z}} \]
                  9. Recombined 2 regimes into one program.
                  10. Final simplification96.8%

                    \[\leadsto \begin{array}{l} \mathbf{if}\;\left(z \cdot z + 1\right) \cdot y \leq \infty:\\ \;\;\;\;\frac{\frac{1}{x}}{\mathsf{fma}\left(z \cdot y, z, y\right)}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{\left(\left(x \cdot z\right) \cdot y\right) \cdot z}\\ \end{array} \]
                  11. Add Preprocessing

                  Alternative 6: 74.5% accurate, 1.1× speedup?

                  \[\begin{array}{l} y\_m = \left|y\right| \\ y\_s = \mathsf{copysign}\left(1, y\right) \\ x\_m = \left|x\right| \\ x\_s = \mathsf{copysign}\left(1, x\right) \\ [x_m, y_m, z] = \mathsf{sort}([x_m, y_m, z])\\ \\ x\_s \cdot \left(y\_s \cdot \begin{array}{l} \mathbf{if}\;z \leq 5.3 \cdot 10^{-5}:\\ \;\;\;\;\frac{\mathsf{fma}\left(-z, z, 1\right)}{x\_m \cdot y\_m}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{\left(z \cdot y\_m\right) \cdot \left(x\_m \cdot z\right)}\\ \end{array}\right) \end{array} \]
                  y\_m = (fabs.f64 y)
                  y\_s = (copysign.f64 #s(literal 1 binary64) y)
                  x\_m = (fabs.f64 x)
                  x\_s = (copysign.f64 #s(literal 1 binary64) x)
                  NOTE: x_m, y_m, and z should be sorted in increasing order before calling this function.
                  (FPCore (x_s y_s x_m y_m z)
                   :precision binary64
                   (*
                    x_s
                    (*
                     y_s
                     (if (<= z 5.3e-5)
                       (/ (fma (- z) z 1.0) (* x_m y_m))
                       (/ 1.0 (* (* z y_m) (* x_m z)))))))
                  y\_m = fabs(y);
                  y\_s = copysign(1.0, y);
                  x\_m = fabs(x);
                  x\_s = copysign(1.0, x);
                  assert(x_m < y_m && y_m < z);
                  double code(double x_s, double y_s, double x_m, double y_m, double z) {
                  	double tmp;
                  	if (z <= 5.3e-5) {
                  		tmp = fma(-z, z, 1.0) / (x_m * y_m);
                  	} else {
                  		tmp = 1.0 / ((z * y_m) * (x_m * z));
                  	}
                  	return x_s * (y_s * tmp);
                  }
                  
                  y\_m = abs(y)
                  y\_s = copysign(1.0, y)
                  x\_m = abs(x)
                  x\_s = copysign(1.0, x)
                  x_m, y_m, z = sort([x_m, y_m, z])
                  function code(x_s, y_s, x_m, y_m, z)
                  	tmp = 0.0
                  	if (z <= 5.3e-5)
                  		tmp = Float64(fma(Float64(-z), z, 1.0) / Float64(x_m * y_m));
                  	else
                  		tmp = Float64(1.0 / Float64(Float64(z * y_m) * Float64(x_m * z)));
                  	end
                  	return Float64(x_s * Float64(y_s * tmp))
                  end
                  
                  y\_m = N[Abs[y], $MachinePrecision]
                  y\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[y]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
                  x\_m = N[Abs[x], $MachinePrecision]
                  x\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[x]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
                  NOTE: x_m, y_m, and z should be sorted in increasing order before calling this function.
                  code[x$95$s_, y$95$s_, x$95$m_, y$95$m_, z_] := N[(x$95$s * N[(y$95$s * If[LessEqual[z, 5.3e-5], N[(N[((-z) * z + 1.0), $MachinePrecision] / N[(x$95$m * y$95$m), $MachinePrecision]), $MachinePrecision], N[(1.0 / N[(N[(z * y$95$m), $MachinePrecision] * N[(x$95$m * z), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]), $MachinePrecision]), $MachinePrecision]
                  
                  \begin{array}{l}
                  y\_m = \left|y\right|
                  \\
                  y\_s = \mathsf{copysign}\left(1, y\right)
                  \\
                  x\_m = \left|x\right|
                  \\
                  x\_s = \mathsf{copysign}\left(1, x\right)
                  \\
                  [x_m, y_m, z] = \mathsf{sort}([x_m, y_m, z])\\
                  \\
                  x\_s \cdot \left(y\_s \cdot \begin{array}{l}
                  \mathbf{if}\;z \leq 5.3 \cdot 10^{-5}:\\
                  \;\;\;\;\frac{\mathsf{fma}\left(-z, z, 1\right)}{x\_m \cdot y\_m}\\
                  
                  \mathbf{else}:\\
                  \;\;\;\;\frac{1}{\left(z \cdot y\_m\right) \cdot \left(x\_m \cdot z\right)}\\
                  
                  
                  \end{array}\right)
                  \end{array}
                  
                  Derivation
                  1. Split input into 2 regimes
                  2. if z < 5.3000000000000001e-5

                    1. Initial program 93.3%

                      \[\frac{\frac{1}{x}}{y \cdot \left(1 + z \cdot z\right)} \]
                    2. Add Preprocessing
                    3. Taylor expanded in z around 0

                      \[\leadsto \color{blue}{-1 \cdot \frac{{z}^{2}}{x \cdot y} + \frac{1}{x \cdot y}} \]
                    4. Step-by-step derivation
                      1. +-commutativeN/A

                        \[\leadsto \color{blue}{\frac{1}{x \cdot y} + -1 \cdot \frac{{z}^{2}}{x \cdot y}} \]
                      2. mul-1-negN/A

                        \[\leadsto \frac{1}{x \cdot y} + \color{blue}{\left(\mathsf{neg}\left(\frac{{z}^{2}}{x \cdot y}\right)\right)} \]
                      3. unsub-negN/A

                        \[\leadsto \color{blue}{\frac{1}{x \cdot y} - \frac{{z}^{2}}{x \cdot y}} \]
                      4. div-subN/A

                        \[\leadsto \color{blue}{\frac{1 - {z}^{2}}{x \cdot y}} \]
                      5. sub-negN/A

                        \[\leadsto \frac{\color{blue}{1 + \left(\mathsf{neg}\left({z}^{2}\right)\right)}}{x \cdot y} \]
                      6. mul-1-negN/A

                        \[\leadsto \frac{1 + \color{blue}{-1 \cdot {z}^{2}}}{x \cdot y} \]
                      7. +-commutativeN/A

                        \[\leadsto \frac{\color{blue}{-1 \cdot {z}^{2} + 1}}{x \cdot y} \]
                      8. lower-/.f64N/A

                        \[\leadsto \color{blue}{\frac{-1 \cdot {z}^{2} + 1}{x \cdot y}} \]
                      9. unpow2N/A

                        \[\leadsto \frac{-1 \cdot \color{blue}{\left(z \cdot z\right)} + 1}{x \cdot y} \]
                      10. associate-*r*N/A

                        \[\leadsto \frac{\color{blue}{\left(-1 \cdot z\right) \cdot z} + 1}{x \cdot y} \]
                      11. lower-fma.f64N/A

                        \[\leadsto \frac{\color{blue}{\mathsf{fma}\left(-1 \cdot z, z, 1\right)}}{x \cdot y} \]
                      12. mul-1-negN/A

                        \[\leadsto \frac{\mathsf{fma}\left(\color{blue}{\mathsf{neg}\left(z\right)}, z, 1\right)}{x \cdot y} \]
                      13. lower-neg.f64N/A

                        \[\leadsto \frac{\mathsf{fma}\left(\color{blue}{-z}, z, 1\right)}{x \cdot y} \]
                      14. *-commutativeN/A

                        \[\leadsto \frac{\mathsf{fma}\left(-z, z, 1\right)}{\color{blue}{y \cdot x}} \]
                      15. lower-*.f6470.2

                        \[\leadsto \frac{\mathsf{fma}\left(-z, z, 1\right)}{\color{blue}{y \cdot x}} \]
                    5. Applied rewrites70.2%

                      \[\leadsto \color{blue}{\frac{\mathsf{fma}\left(-z, z, 1\right)}{y \cdot x}} \]

                    if 5.3000000000000001e-5 < z

                    1. Initial program 88.8%

                      \[\frac{\frac{1}{x}}{y \cdot \left(1 + z \cdot z\right)} \]
                    2. Add Preprocessing
                    3. Step-by-step derivation
                      1. lift-/.f64N/A

                        \[\leadsto \frac{\color{blue}{\frac{1}{x}}}{y \cdot \left(1 + z \cdot z\right)} \]
                      2. inv-powN/A

                        \[\leadsto \frac{\color{blue}{{x}^{-1}}}{y \cdot \left(1 + z \cdot z\right)} \]
                      3. sqr-powN/A

                        \[\leadsto \frac{\color{blue}{{x}^{\left(\frac{-1}{2}\right)} \cdot {x}^{\left(\frac{-1}{2}\right)}}}{y \cdot \left(1 + z \cdot z\right)} \]
                      4. pow2N/A

                        \[\leadsto \frac{\color{blue}{{\left({x}^{\left(\frac{-1}{2}\right)}\right)}^{2}}}{y \cdot \left(1 + z \cdot z\right)} \]
                      5. lower-pow.f64N/A

                        \[\leadsto \frac{\color{blue}{{\left({x}^{\left(\frac{-1}{2}\right)}\right)}^{2}}}{y \cdot \left(1 + z \cdot z\right)} \]
                      6. lower-pow.f64N/A

                        \[\leadsto \frac{{\color{blue}{\left({x}^{\left(\frac{-1}{2}\right)}\right)}}^{2}}{y \cdot \left(1 + z \cdot z\right)} \]
                      7. metadata-eval42.0

                        \[\leadsto \frac{{\left({x}^{\color{blue}{-0.5}}\right)}^{2}}{y \cdot \left(1 + z \cdot z\right)} \]
                    4. Applied rewrites42.0%

                      \[\leadsto \frac{\color{blue}{{\left({x}^{-0.5}\right)}^{2}}}{y \cdot \left(1 + z \cdot z\right)} \]
                    5. Taylor expanded in z around inf

                      \[\leadsto \color{blue}{\frac{1}{x \cdot \left(y \cdot {z}^{2}\right)}} \]
                    6. Step-by-step derivation
                      1. lower-/.f64N/A

                        \[\leadsto \color{blue}{\frac{1}{x \cdot \left(y \cdot {z}^{2}\right)}} \]
                      2. *-commutativeN/A

                        \[\leadsto \frac{1}{\color{blue}{\left(y \cdot {z}^{2}\right) \cdot x}} \]
                      3. lower-*.f64N/A

                        \[\leadsto \frac{1}{\color{blue}{\left(y \cdot {z}^{2}\right) \cdot x}} \]
                      4. *-commutativeN/A

                        \[\leadsto \frac{1}{\color{blue}{\left({z}^{2} \cdot y\right)} \cdot x} \]
                      5. lower-*.f64N/A

                        \[\leadsto \frac{1}{\color{blue}{\left({z}^{2} \cdot y\right)} \cdot x} \]
                      6. unpow2N/A

                        \[\leadsto \frac{1}{\left(\color{blue}{\left(z \cdot z\right)} \cdot y\right) \cdot x} \]
                      7. lower-*.f6488.8

                        \[\leadsto \frac{1}{\left(\color{blue}{\left(z \cdot z\right)} \cdot y\right) \cdot x} \]
                    7. Applied rewrites88.8%

                      \[\leadsto \color{blue}{\frac{1}{\left(\left(z \cdot z\right) \cdot y\right) \cdot x}} \]
                    8. Step-by-step derivation
                      1. Applied rewrites94.2%

                        \[\leadsto \frac{1}{\left(z \cdot y\right) \cdot \color{blue}{\left(z \cdot x\right)}} \]
                    9. Recombined 2 regimes into one program.
                    10. Final simplification76.6%

                      \[\leadsto \begin{array}{l} \mathbf{if}\;z \leq 5.3 \cdot 10^{-5}:\\ \;\;\;\;\frac{\mathsf{fma}\left(-z, z, 1\right)}{x \cdot y}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{\left(z \cdot y\right) \cdot \left(x \cdot z\right)}\\ \end{array} \]
                    11. Add Preprocessing

                    Alternative 7: 74.2% accurate, 1.1× speedup?

                    \[\begin{array}{l} y\_m = \left|y\right| \\ y\_s = \mathsf{copysign}\left(1, y\right) \\ x\_m = \left|x\right| \\ x\_s = \mathsf{copysign}\left(1, x\right) \\ [x_m, y_m, z] = \mathsf{sort}([x_m, y_m, z])\\ \\ x\_s \cdot \left(y\_s \cdot \begin{array}{l} \mathbf{if}\;z \leq 5.3 \cdot 10^{-5}:\\ \;\;\;\;\frac{\mathsf{fma}\left(-z, z, 1\right)}{x\_m \cdot y\_m}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{\left(\left(z \cdot y\_m\right) \cdot x\_m\right) \cdot z}\\ \end{array}\right) \end{array} \]
                    y\_m = (fabs.f64 y)
                    y\_s = (copysign.f64 #s(literal 1 binary64) y)
                    x\_m = (fabs.f64 x)
                    x\_s = (copysign.f64 #s(literal 1 binary64) x)
                    NOTE: x_m, y_m, and z should be sorted in increasing order before calling this function.
                    (FPCore (x_s y_s x_m y_m z)
                     :precision binary64
                     (*
                      x_s
                      (*
                       y_s
                       (if (<= z 5.3e-5)
                         (/ (fma (- z) z 1.0) (* x_m y_m))
                         (/ 1.0 (* (* (* z y_m) x_m) z))))))
                    y\_m = fabs(y);
                    y\_s = copysign(1.0, y);
                    x\_m = fabs(x);
                    x\_s = copysign(1.0, x);
                    assert(x_m < y_m && y_m < z);
                    double code(double x_s, double y_s, double x_m, double y_m, double z) {
                    	double tmp;
                    	if (z <= 5.3e-5) {
                    		tmp = fma(-z, z, 1.0) / (x_m * y_m);
                    	} else {
                    		tmp = 1.0 / (((z * y_m) * x_m) * z);
                    	}
                    	return x_s * (y_s * tmp);
                    }
                    
                    y\_m = abs(y)
                    y\_s = copysign(1.0, y)
                    x\_m = abs(x)
                    x\_s = copysign(1.0, x)
                    x_m, y_m, z = sort([x_m, y_m, z])
                    function code(x_s, y_s, x_m, y_m, z)
                    	tmp = 0.0
                    	if (z <= 5.3e-5)
                    		tmp = Float64(fma(Float64(-z), z, 1.0) / Float64(x_m * y_m));
                    	else
                    		tmp = Float64(1.0 / Float64(Float64(Float64(z * y_m) * x_m) * z));
                    	end
                    	return Float64(x_s * Float64(y_s * tmp))
                    end
                    
                    y\_m = N[Abs[y], $MachinePrecision]
                    y\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[y]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
                    x\_m = N[Abs[x], $MachinePrecision]
                    x\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[x]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
                    NOTE: x_m, y_m, and z should be sorted in increasing order before calling this function.
                    code[x$95$s_, y$95$s_, x$95$m_, y$95$m_, z_] := N[(x$95$s * N[(y$95$s * If[LessEqual[z, 5.3e-5], N[(N[((-z) * z + 1.0), $MachinePrecision] / N[(x$95$m * y$95$m), $MachinePrecision]), $MachinePrecision], N[(1.0 / N[(N[(N[(z * y$95$m), $MachinePrecision] * x$95$m), $MachinePrecision] * z), $MachinePrecision]), $MachinePrecision]]), $MachinePrecision]), $MachinePrecision]
                    
                    \begin{array}{l}
                    y\_m = \left|y\right|
                    \\
                    y\_s = \mathsf{copysign}\left(1, y\right)
                    \\
                    x\_m = \left|x\right|
                    \\
                    x\_s = \mathsf{copysign}\left(1, x\right)
                    \\
                    [x_m, y_m, z] = \mathsf{sort}([x_m, y_m, z])\\
                    \\
                    x\_s \cdot \left(y\_s \cdot \begin{array}{l}
                    \mathbf{if}\;z \leq 5.3 \cdot 10^{-5}:\\
                    \;\;\;\;\frac{\mathsf{fma}\left(-z, z, 1\right)}{x\_m \cdot y\_m}\\
                    
                    \mathbf{else}:\\
                    \;\;\;\;\frac{1}{\left(\left(z \cdot y\_m\right) \cdot x\_m\right) \cdot z}\\
                    
                    
                    \end{array}\right)
                    \end{array}
                    
                    Derivation
                    1. Split input into 2 regimes
                    2. if z < 5.3000000000000001e-5

                      1. Initial program 93.3%

                        \[\frac{\frac{1}{x}}{y \cdot \left(1 + z \cdot z\right)} \]
                      2. Add Preprocessing
                      3. Taylor expanded in z around 0

                        \[\leadsto \color{blue}{-1 \cdot \frac{{z}^{2}}{x \cdot y} + \frac{1}{x \cdot y}} \]
                      4. Step-by-step derivation
                        1. +-commutativeN/A

                          \[\leadsto \color{blue}{\frac{1}{x \cdot y} + -1 \cdot \frac{{z}^{2}}{x \cdot y}} \]
                        2. mul-1-negN/A

                          \[\leadsto \frac{1}{x \cdot y} + \color{blue}{\left(\mathsf{neg}\left(\frac{{z}^{2}}{x \cdot y}\right)\right)} \]
                        3. unsub-negN/A

                          \[\leadsto \color{blue}{\frac{1}{x \cdot y} - \frac{{z}^{2}}{x \cdot y}} \]
                        4. div-subN/A

                          \[\leadsto \color{blue}{\frac{1 - {z}^{2}}{x \cdot y}} \]
                        5. sub-negN/A

                          \[\leadsto \frac{\color{blue}{1 + \left(\mathsf{neg}\left({z}^{2}\right)\right)}}{x \cdot y} \]
                        6. mul-1-negN/A

                          \[\leadsto \frac{1 + \color{blue}{-1 \cdot {z}^{2}}}{x \cdot y} \]
                        7. +-commutativeN/A

                          \[\leadsto \frac{\color{blue}{-1 \cdot {z}^{2} + 1}}{x \cdot y} \]
                        8. lower-/.f64N/A

                          \[\leadsto \color{blue}{\frac{-1 \cdot {z}^{2} + 1}{x \cdot y}} \]
                        9. unpow2N/A

                          \[\leadsto \frac{-1 \cdot \color{blue}{\left(z \cdot z\right)} + 1}{x \cdot y} \]
                        10. associate-*r*N/A

                          \[\leadsto \frac{\color{blue}{\left(-1 \cdot z\right) \cdot z} + 1}{x \cdot y} \]
                        11. lower-fma.f64N/A

                          \[\leadsto \frac{\color{blue}{\mathsf{fma}\left(-1 \cdot z, z, 1\right)}}{x \cdot y} \]
                        12. mul-1-negN/A

                          \[\leadsto \frac{\mathsf{fma}\left(\color{blue}{\mathsf{neg}\left(z\right)}, z, 1\right)}{x \cdot y} \]
                        13. lower-neg.f64N/A

                          \[\leadsto \frac{\mathsf{fma}\left(\color{blue}{-z}, z, 1\right)}{x \cdot y} \]
                        14. *-commutativeN/A

                          \[\leadsto \frac{\mathsf{fma}\left(-z, z, 1\right)}{\color{blue}{y \cdot x}} \]
                        15. lower-*.f6470.2

                          \[\leadsto \frac{\mathsf{fma}\left(-z, z, 1\right)}{\color{blue}{y \cdot x}} \]
                      5. Applied rewrites70.2%

                        \[\leadsto \color{blue}{\frac{\mathsf{fma}\left(-z, z, 1\right)}{y \cdot x}} \]

                      if 5.3000000000000001e-5 < z

                      1. Initial program 88.8%

                        \[\frac{\frac{1}{x}}{y \cdot \left(1 + z \cdot z\right)} \]
                      2. Add Preprocessing
                      3. Step-by-step derivation
                        1. lift-/.f64N/A

                          \[\leadsto \frac{\color{blue}{\frac{1}{x}}}{y \cdot \left(1 + z \cdot z\right)} \]
                        2. inv-powN/A

                          \[\leadsto \frac{\color{blue}{{x}^{-1}}}{y \cdot \left(1 + z \cdot z\right)} \]
                        3. sqr-powN/A

                          \[\leadsto \frac{\color{blue}{{x}^{\left(\frac{-1}{2}\right)} \cdot {x}^{\left(\frac{-1}{2}\right)}}}{y \cdot \left(1 + z \cdot z\right)} \]
                        4. pow2N/A

                          \[\leadsto \frac{\color{blue}{{\left({x}^{\left(\frac{-1}{2}\right)}\right)}^{2}}}{y \cdot \left(1 + z \cdot z\right)} \]
                        5. lower-pow.f64N/A

                          \[\leadsto \frac{\color{blue}{{\left({x}^{\left(\frac{-1}{2}\right)}\right)}^{2}}}{y \cdot \left(1 + z \cdot z\right)} \]
                        6. lower-pow.f64N/A

                          \[\leadsto \frac{{\color{blue}{\left({x}^{\left(\frac{-1}{2}\right)}\right)}}^{2}}{y \cdot \left(1 + z \cdot z\right)} \]
                        7. metadata-eval42.0

                          \[\leadsto \frac{{\left({x}^{\color{blue}{-0.5}}\right)}^{2}}{y \cdot \left(1 + z \cdot z\right)} \]
                      4. Applied rewrites42.0%

                        \[\leadsto \frac{\color{blue}{{\left({x}^{-0.5}\right)}^{2}}}{y \cdot \left(1 + z \cdot z\right)} \]
                      5. Taylor expanded in z around inf

                        \[\leadsto \color{blue}{\frac{1}{x \cdot \left(y \cdot {z}^{2}\right)}} \]
                      6. Step-by-step derivation
                        1. lower-/.f64N/A

                          \[\leadsto \color{blue}{\frac{1}{x \cdot \left(y \cdot {z}^{2}\right)}} \]
                        2. *-commutativeN/A

                          \[\leadsto \frac{1}{\color{blue}{\left(y \cdot {z}^{2}\right) \cdot x}} \]
                        3. lower-*.f64N/A

                          \[\leadsto \frac{1}{\color{blue}{\left(y \cdot {z}^{2}\right) \cdot x}} \]
                        4. *-commutativeN/A

                          \[\leadsto \frac{1}{\color{blue}{\left({z}^{2} \cdot y\right)} \cdot x} \]
                        5. lower-*.f64N/A

                          \[\leadsto \frac{1}{\color{blue}{\left({z}^{2} \cdot y\right)} \cdot x} \]
                        6. unpow2N/A

                          \[\leadsto \frac{1}{\left(\color{blue}{\left(z \cdot z\right)} \cdot y\right) \cdot x} \]
                        7. lower-*.f6488.8

                          \[\leadsto \frac{1}{\left(\color{blue}{\left(z \cdot z\right)} \cdot y\right) \cdot x} \]
                      7. Applied rewrites88.8%

                        \[\leadsto \color{blue}{\frac{1}{\left(\left(z \cdot z\right) \cdot y\right) \cdot x}} \]
                      8. Step-by-step derivation
                        1. Applied rewrites96.8%

                          \[\leadsto \frac{1}{\left(x \cdot \left(z \cdot y\right)\right) \cdot \color{blue}{z}} \]
                      9. Recombined 2 regimes into one program.
                      10. Final simplification77.3%

                        \[\leadsto \begin{array}{l} \mathbf{if}\;z \leq 5.3 \cdot 10^{-5}:\\ \;\;\;\;\frac{\mathsf{fma}\left(-z, z, 1\right)}{x \cdot y}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{\left(\left(z \cdot y\right) \cdot x\right) \cdot z}\\ \end{array} \]
                      11. Add Preprocessing

                      Alternative 8: 70.1% accurate, 1.1× speedup?

                      \[\begin{array}{l} y\_m = \left|y\right| \\ y\_s = \mathsf{copysign}\left(1, y\right) \\ x\_m = \left|x\right| \\ x\_s = \mathsf{copysign}\left(1, x\right) \\ [x_m, y_m, z] = \mathsf{sort}([x_m, y_m, z])\\ \\ x\_s \cdot \left(y\_s \cdot \begin{array}{l} \mathbf{if}\;z \leq 5.3 \cdot 10^{-5}:\\ \;\;\;\;\frac{\mathsf{fma}\left(-z, z, 1\right)}{x\_m \cdot y\_m}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{\left(\left(z \cdot z\right) \cdot y\_m\right) \cdot x\_m}\\ \end{array}\right) \end{array} \]
                      y\_m = (fabs.f64 y)
                      y\_s = (copysign.f64 #s(literal 1 binary64) y)
                      x\_m = (fabs.f64 x)
                      x\_s = (copysign.f64 #s(literal 1 binary64) x)
                      NOTE: x_m, y_m, and z should be sorted in increasing order before calling this function.
                      (FPCore (x_s y_s x_m y_m z)
                       :precision binary64
                       (*
                        x_s
                        (*
                         y_s
                         (if (<= z 5.3e-5)
                           (/ (fma (- z) z 1.0) (* x_m y_m))
                           (/ 1.0 (* (* (* z z) y_m) x_m))))))
                      y\_m = fabs(y);
                      y\_s = copysign(1.0, y);
                      x\_m = fabs(x);
                      x\_s = copysign(1.0, x);
                      assert(x_m < y_m && y_m < z);
                      double code(double x_s, double y_s, double x_m, double y_m, double z) {
                      	double tmp;
                      	if (z <= 5.3e-5) {
                      		tmp = fma(-z, z, 1.0) / (x_m * y_m);
                      	} else {
                      		tmp = 1.0 / (((z * z) * y_m) * x_m);
                      	}
                      	return x_s * (y_s * tmp);
                      }
                      
                      y\_m = abs(y)
                      y\_s = copysign(1.0, y)
                      x\_m = abs(x)
                      x\_s = copysign(1.0, x)
                      x_m, y_m, z = sort([x_m, y_m, z])
                      function code(x_s, y_s, x_m, y_m, z)
                      	tmp = 0.0
                      	if (z <= 5.3e-5)
                      		tmp = Float64(fma(Float64(-z), z, 1.0) / Float64(x_m * y_m));
                      	else
                      		tmp = Float64(1.0 / Float64(Float64(Float64(z * z) * y_m) * x_m));
                      	end
                      	return Float64(x_s * Float64(y_s * tmp))
                      end
                      
                      y\_m = N[Abs[y], $MachinePrecision]
                      y\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[y]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
                      x\_m = N[Abs[x], $MachinePrecision]
                      x\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[x]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
                      NOTE: x_m, y_m, and z should be sorted in increasing order before calling this function.
                      code[x$95$s_, y$95$s_, x$95$m_, y$95$m_, z_] := N[(x$95$s * N[(y$95$s * If[LessEqual[z, 5.3e-5], N[(N[((-z) * z + 1.0), $MachinePrecision] / N[(x$95$m * y$95$m), $MachinePrecision]), $MachinePrecision], N[(1.0 / N[(N[(N[(z * z), $MachinePrecision] * y$95$m), $MachinePrecision] * x$95$m), $MachinePrecision]), $MachinePrecision]]), $MachinePrecision]), $MachinePrecision]
                      
                      \begin{array}{l}
                      y\_m = \left|y\right|
                      \\
                      y\_s = \mathsf{copysign}\left(1, y\right)
                      \\
                      x\_m = \left|x\right|
                      \\
                      x\_s = \mathsf{copysign}\left(1, x\right)
                      \\
                      [x_m, y_m, z] = \mathsf{sort}([x_m, y_m, z])\\
                      \\
                      x\_s \cdot \left(y\_s \cdot \begin{array}{l}
                      \mathbf{if}\;z \leq 5.3 \cdot 10^{-5}:\\
                      \;\;\;\;\frac{\mathsf{fma}\left(-z, z, 1\right)}{x\_m \cdot y\_m}\\
                      
                      \mathbf{else}:\\
                      \;\;\;\;\frac{1}{\left(\left(z \cdot z\right) \cdot y\_m\right) \cdot x\_m}\\
                      
                      
                      \end{array}\right)
                      \end{array}
                      
                      Derivation
                      1. Split input into 2 regimes
                      2. if z < 5.3000000000000001e-5

                        1. Initial program 93.3%

                          \[\frac{\frac{1}{x}}{y \cdot \left(1 + z \cdot z\right)} \]
                        2. Add Preprocessing
                        3. Taylor expanded in z around 0

                          \[\leadsto \color{blue}{-1 \cdot \frac{{z}^{2}}{x \cdot y} + \frac{1}{x \cdot y}} \]
                        4. Step-by-step derivation
                          1. +-commutativeN/A

                            \[\leadsto \color{blue}{\frac{1}{x \cdot y} + -1 \cdot \frac{{z}^{2}}{x \cdot y}} \]
                          2. mul-1-negN/A

                            \[\leadsto \frac{1}{x \cdot y} + \color{blue}{\left(\mathsf{neg}\left(\frac{{z}^{2}}{x \cdot y}\right)\right)} \]
                          3. unsub-negN/A

                            \[\leadsto \color{blue}{\frac{1}{x \cdot y} - \frac{{z}^{2}}{x \cdot y}} \]
                          4. div-subN/A

                            \[\leadsto \color{blue}{\frac{1 - {z}^{2}}{x \cdot y}} \]
                          5. sub-negN/A

                            \[\leadsto \frac{\color{blue}{1 + \left(\mathsf{neg}\left({z}^{2}\right)\right)}}{x \cdot y} \]
                          6. mul-1-negN/A

                            \[\leadsto \frac{1 + \color{blue}{-1 \cdot {z}^{2}}}{x \cdot y} \]
                          7. +-commutativeN/A

                            \[\leadsto \frac{\color{blue}{-1 \cdot {z}^{2} + 1}}{x \cdot y} \]
                          8. lower-/.f64N/A

                            \[\leadsto \color{blue}{\frac{-1 \cdot {z}^{2} + 1}{x \cdot y}} \]
                          9. unpow2N/A

                            \[\leadsto \frac{-1 \cdot \color{blue}{\left(z \cdot z\right)} + 1}{x \cdot y} \]
                          10. associate-*r*N/A

                            \[\leadsto \frac{\color{blue}{\left(-1 \cdot z\right) \cdot z} + 1}{x \cdot y} \]
                          11. lower-fma.f64N/A

                            \[\leadsto \frac{\color{blue}{\mathsf{fma}\left(-1 \cdot z, z, 1\right)}}{x \cdot y} \]
                          12. mul-1-negN/A

                            \[\leadsto \frac{\mathsf{fma}\left(\color{blue}{\mathsf{neg}\left(z\right)}, z, 1\right)}{x \cdot y} \]
                          13. lower-neg.f64N/A

                            \[\leadsto \frac{\mathsf{fma}\left(\color{blue}{-z}, z, 1\right)}{x \cdot y} \]
                          14. *-commutativeN/A

                            \[\leadsto \frac{\mathsf{fma}\left(-z, z, 1\right)}{\color{blue}{y \cdot x}} \]
                          15. lower-*.f6470.2

                            \[\leadsto \frac{\mathsf{fma}\left(-z, z, 1\right)}{\color{blue}{y \cdot x}} \]
                        5. Applied rewrites70.2%

                          \[\leadsto \color{blue}{\frac{\mathsf{fma}\left(-z, z, 1\right)}{y \cdot x}} \]

                        if 5.3000000000000001e-5 < z

                        1. Initial program 88.8%

                          \[\frac{\frac{1}{x}}{y \cdot \left(1 + z \cdot z\right)} \]
                        2. Add Preprocessing
                        3. Taylor expanded in z around inf

                          \[\leadsto \color{blue}{\frac{1}{x \cdot \left(y \cdot {z}^{2}\right)}} \]
                        4. Step-by-step derivation
                          1. lower-/.f64N/A

                            \[\leadsto \color{blue}{\frac{1}{x \cdot \left(y \cdot {z}^{2}\right)}} \]
                          2. *-commutativeN/A

                            \[\leadsto \frac{1}{\color{blue}{\left(y \cdot {z}^{2}\right) \cdot x}} \]
                          3. lower-*.f64N/A

                            \[\leadsto \frac{1}{\color{blue}{\left(y \cdot {z}^{2}\right) \cdot x}} \]
                          4. lower-*.f64N/A

                            \[\leadsto \frac{1}{\color{blue}{\left(y \cdot {z}^{2}\right)} \cdot x} \]
                          5. unpow2N/A

                            \[\leadsto \frac{1}{\left(y \cdot \color{blue}{\left(z \cdot z\right)}\right) \cdot x} \]
                          6. lower-*.f6488.8

                            \[\leadsto \frac{1}{\left(y \cdot \color{blue}{\left(z \cdot z\right)}\right) \cdot x} \]
                        5. Applied rewrites88.8%

                          \[\leadsto \color{blue}{\frac{1}{\left(y \cdot \left(z \cdot z\right)\right) \cdot x}} \]
                      3. Recombined 2 regimes into one program.
                      4. Final simplification75.2%

                        \[\leadsto \begin{array}{l} \mathbf{if}\;z \leq 5.3 \cdot 10^{-5}:\\ \;\;\;\;\frac{\mathsf{fma}\left(-z, z, 1\right)}{x \cdot y}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{\left(\left(z \cdot z\right) \cdot y\right) \cdot x}\\ \end{array} \]
                      5. Add Preprocessing

                      Alternative 9: 61.5% accurate, 1.2× speedup?

                      \[\begin{array}{l} y\_m = \left|y\right| \\ y\_s = \mathsf{copysign}\left(1, y\right) \\ x\_m = \left|x\right| \\ x\_s = \mathsf{copysign}\left(1, x\right) \\ [x_m, y_m, z] = \mathsf{sort}([x_m, y_m, z])\\ \\ x\_s \cdot \left(y\_s \cdot \begin{array}{l} \mathbf{if}\;z \leq 5.3 \cdot 10^{-5}:\\ \;\;\;\;\frac{\mathsf{fma}\left(-z, z, 1\right)}{x\_m \cdot y\_m}\\ \mathbf{else}:\\ \;\;\;\;\frac{y\_m}{\left(y\_m \cdot y\_m\right) \cdot x\_m}\\ \end{array}\right) \end{array} \]
                      y\_m = (fabs.f64 y)
                      y\_s = (copysign.f64 #s(literal 1 binary64) y)
                      x\_m = (fabs.f64 x)
                      x\_s = (copysign.f64 #s(literal 1 binary64) x)
                      NOTE: x_m, y_m, and z should be sorted in increasing order before calling this function.
                      (FPCore (x_s y_s x_m y_m z)
                       :precision binary64
                       (*
                        x_s
                        (*
                         y_s
                         (if (<= z 5.3e-5)
                           (/ (fma (- z) z 1.0) (* x_m y_m))
                           (/ y_m (* (* y_m y_m) x_m))))))
                      y\_m = fabs(y);
                      y\_s = copysign(1.0, y);
                      x\_m = fabs(x);
                      x\_s = copysign(1.0, x);
                      assert(x_m < y_m && y_m < z);
                      double code(double x_s, double y_s, double x_m, double y_m, double z) {
                      	double tmp;
                      	if (z <= 5.3e-5) {
                      		tmp = fma(-z, z, 1.0) / (x_m * y_m);
                      	} else {
                      		tmp = y_m / ((y_m * y_m) * x_m);
                      	}
                      	return x_s * (y_s * tmp);
                      }
                      
                      y\_m = abs(y)
                      y\_s = copysign(1.0, y)
                      x\_m = abs(x)
                      x\_s = copysign(1.0, x)
                      x_m, y_m, z = sort([x_m, y_m, z])
                      function code(x_s, y_s, x_m, y_m, z)
                      	tmp = 0.0
                      	if (z <= 5.3e-5)
                      		tmp = Float64(fma(Float64(-z), z, 1.0) / Float64(x_m * y_m));
                      	else
                      		tmp = Float64(y_m / Float64(Float64(y_m * y_m) * x_m));
                      	end
                      	return Float64(x_s * Float64(y_s * tmp))
                      end
                      
                      y\_m = N[Abs[y], $MachinePrecision]
                      y\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[y]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
                      x\_m = N[Abs[x], $MachinePrecision]
                      x\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[x]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
                      NOTE: x_m, y_m, and z should be sorted in increasing order before calling this function.
                      code[x$95$s_, y$95$s_, x$95$m_, y$95$m_, z_] := N[(x$95$s * N[(y$95$s * If[LessEqual[z, 5.3e-5], N[(N[((-z) * z + 1.0), $MachinePrecision] / N[(x$95$m * y$95$m), $MachinePrecision]), $MachinePrecision], N[(y$95$m / N[(N[(y$95$m * y$95$m), $MachinePrecision] * x$95$m), $MachinePrecision]), $MachinePrecision]]), $MachinePrecision]), $MachinePrecision]
                      
                      \begin{array}{l}
                      y\_m = \left|y\right|
                      \\
                      y\_s = \mathsf{copysign}\left(1, y\right)
                      \\
                      x\_m = \left|x\right|
                      \\
                      x\_s = \mathsf{copysign}\left(1, x\right)
                      \\
                      [x_m, y_m, z] = \mathsf{sort}([x_m, y_m, z])\\
                      \\
                      x\_s \cdot \left(y\_s \cdot \begin{array}{l}
                      \mathbf{if}\;z \leq 5.3 \cdot 10^{-5}:\\
                      \;\;\;\;\frac{\mathsf{fma}\left(-z, z, 1\right)}{x\_m \cdot y\_m}\\
                      
                      \mathbf{else}:\\
                      \;\;\;\;\frac{y\_m}{\left(y\_m \cdot y\_m\right) \cdot x\_m}\\
                      
                      
                      \end{array}\right)
                      \end{array}
                      
                      Derivation
                      1. Split input into 2 regimes
                      2. if z < 5.3000000000000001e-5

                        1. Initial program 93.3%

                          \[\frac{\frac{1}{x}}{y \cdot \left(1 + z \cdot z\right)} \]
                        2. Add Preprocessing
                        3. Taylor expanded in z around 0

                          \[\leadsto \color{blue}{-1 \cdot \frac{{z}^{2}}{x \cdot y} + \frac{1}{x \cdot y}} \]
                        4. Step-by-step derivation
                          1. +-commutativeN/A

                            \[\leadsto \color{blue}{\frac{1}{x \cdot y} + -1 \cdot \frac{{z}^{2}}{x \cdot y}} \]
                          2. mul-1-negN/A

                            \[\leadsto \frac{1}{x \cdot y} + \color{blue}{\left(\mathsf{neg}\left(\frac{{z}^{2}}{x \cdot y}\right)\right)} \]
                          3. unsub-negN/A

                            \[\leadsto \color{blue}{\frac{1}{x \cdot y} - \frac{{z}^{2}}{x \cdot y}} \]
                          4. div-subN/A

                            \[\leadsto \color{blue}{\frac{1 - {z}^{2}}{x \cdot y}} \]
                          5. sub-negN/A

                            \[\leadsto \frac{\color{blue}{1 + \left(\mathsf{neg}\left({z}^{2}\right)\right)}}{x \cdot y} \]
                          6. mul-1-negN/A

                            \[\leadsto \frac{1 + \color{blue}{-1 \cdot {z}^{2}}}{x \cdot y} \]
                          7. +-commutativeN/A

                            \[\leadsto \frac{\color{blue}{-1 \cdot {z}^{2} + 1}}{x \cdot y} \]
                          8. lower-/.f64N/A

                            \[\leadsto \color{blue}{\frac{-1 \cdot {z}^{2} + 1}{x \cdot y}} \]
                          9. unpow2N/A

                            \[\leadsto \frac{-1 \cdot \color{blue}{\left(z \cdot z\right)} + 1}{x \cdot y} \]
                          10. associate-*r*N/A

                            \[\leadsto \frac{\color{blue}{\left(-1 \cdot z\right) \cdot z} + 1}{x \cdot y} \]
                          11. lower-fma.f64N/A

                            \[\leadsto \frac{\color{blue}{\mathsf{fma}\left(-1 \cdot z, z, 1\right)}}{x \cdot y} \]
                          12. mul-1-negN/A

                            \[\leadsto \frac{\mathsf{fma}\left(\color{blue}{\mathsf{neg}\left(z\right)}, z, 1\right)}{x \cdot y} \]
                          13. lower-neg.f64N/A

                            \[\leadsto \frac{\mathsf{fma}\left(\color{blue}{-z}, z, 1\right)}{x \cdot y} \]
                          14. *-commutativeN/A

                            \[\leadsto \frac{\mathsf{fma}\left(-z, z, 1\right)}{\color{blue}{y \cdot x}} \]
                          15. lower-*.f6470.2

                            \[\leadsto \frac{\mathsf{fma}\left(-z, z, 1\right)}{\color{blue}{y \cdot x}} \]
                        5. Applied rewrites70.2%

                          \[\leadsto \color{blue}{\frac{\mathsf{fma}\left(-z, z, 1\right)}{y \cdot x}} \]

                        if 5.3000000000000001e-5 < z

                        1. Initial program 88.8%

                          \[\frac{\frac{1}{x}}{y \cdot \left(1 + z \cdot z\right)} \]
                        2. Add Preprocessing
                        3. Taylor expanded in z around 0

                          \[\leadsto \color{blue}{\frac{1}{x \cdot y}} \]
                        4. Step-by-step derivation
                          1. lower-/.f64N/A

                            \[\leadsto \color{blue}{\frac{1}{x \cdot y}} \]
                          2. *-commutativeN/A

                            \[\leadsto \frac{1}{\color{blue}{y \cdot x}} \]
                          3. lower-*.f6419.8

                            \[\leadsto \frac{1}{\color{blue}{y \cdot x}} \]
                        5. Applied rewrites19.8%

                          \[\leadsto \color{blue}{\frac{1}{y \cdot x}} \]
                        6. Step-by-step derivation
                          1. Applied rewrites34.6%

                            \[\leadsto \frac{\frac{-1}{x}}{-y \cdot y} \cdot \color{blue}{y} \]
                          2. Step-by-step derivation
                            1. Applied rewrites34.6%

                              \[\leadsto \frac{y}{\color{blue}{\left(y \cdot y\right) \cdot x}} \]
                          3. Recombined 2 regimes into one program.
                          4. Final simplification60.6%

                            \[\leadsto \begin{array}{l} \mathbf{if}\;z \leq 5.3 \cdot 10^{-5}:\\ \;\;\;\;\frac{\mathsf{fma}\left(-z, z, 1\right)}{x \cdot y}\\ \mathbf{else}:\\ \;\;\;\;\frac{y}{\left(y \cdot y\right) \cdot x}\\ \end{array} \]
                          5. Add Preprocessing

                          Alternative 10: 58.8% accurate, 2.1× speedup?

                          \[\begin{array}{l} y\_m = \left|y\right| \\ y\_s = \mathsf{copysign}\left(1, y\right) \\ x\_m = \left|x\right| \\ x\_s = \mathsf{copysign}\left(1, x\right) \\ [x_m, y_m, z] = \mathsf{sort}([x_m, y_m, z])\\ \\ x\_s \cdot \left(y\_s \cdot \frac{1}{x\_m \cdot y\_m}\right) \end{array} \]
                          y\_m = (fabs.f64 y)
                          y\_s = (copysign.f64 #s(literal 1 binary64) y)
                          x\_m = (fabs.f64 x)
                          x\_s = (copysign.f64 #s(literal 1 binary64) x)
                          NOTE: x_m, y_m, and z should be sorted in increasing order before calling this function.
                          (FPCore (x_s y_s x_m y_m z)
                           :precision binary64
                           (* x_s (* y_s (/ 1.0 (* x_m y_m)))))
                          y\_m = fabs(y);
                          y\_s = copysign(1.0, y);
                          x\_m = fabs(x);
                          x\_s = copysign(1.0, x);
                          assert(x_m < y_m && y_m < z);
                          double code(double x_s, double y_s, double x_m, double y_m, double z) {
                          	return x_s * (y_s * (1.0 / (x_m * y_m)));
                          }
                          
                          y\_m = abs(y)
                          y\_s = copysign(1.0d0, y)
                          x\_m = abs(x)
                          x\_s = copysign(1.0d0, x)
                          NOTE: x_m, y_m, and z should be sorted in increasing order before calling this function.
                          real(8) function code(x_s, y_s, x_m, y_m, z)
                              real(8), intent (in) :: x_s
                              real(8), intent (in) :: y_s
                              real(8), intent (in) :: x_m
                              real(8), intent (in) :: y_m
                              real(8), intent (in) :: z
                              code = x_s * (y_s * (1.0d0 / (x_m * y_m)))
                          end function
                          
                          y\_m = Math.abs(y);
                          y\_s = Math.copySign(1.0, y);
                          x\_m = Math.abs(x);
                          x\_s = Math.copySign(1.0, x);
                          assert x_m < y_m && y_m < z;
                          public static double code(double x_s, double y_s, double x_m, double y_m, double z) {
                          	return x_s * (y_s * (1.0 / (x_m * y_m)));
                          }
                          
                          y\_m = math.fabs(y)
                          y\_s = math.copysign(1.0, y)
                          x\_m = math.fabs(x)
                          x\_s = math.copysign(1.0, x)
                          [x_m, y_m, z] = sort([x_m, y_m, z])
                          def code(x_s, y_s, x_m, y_m, z):
                          	return x_s * (y_s * (1.0 / (x_m * y_m)))
                          
                          y\_m = abs(y)
                          y\_s = copysign(1.0, y)
                          x\_m = abs(x)
                          x\_s = copysign(1.0, x)
                          x_m, y_m, z = sort([x_m, y_m, z])
                          function code(x_s, y_s, x_m, y_m, z)
                          	return Float64(x_s * Float64(y_s * Float64(1.0 / Float64(x_m * y_m))))
                          end
                          
                          y\_m = abs(y);
                          y\_s = sign(y) * abs(1.0);
                          x\_m = abs(x);
                          x\_s = sign(x) * abs(1.0);
                          x_m, y_m, z = num2cell(sort([x_m, y_m, z])){:}
                          function tmp = code(x_s, y_s, x_m, y_m, z)
                          	tmp = x_s * (y_s * (1.0 / (x_m * y_m)));
                          end
                          
                          y\_m = N[Abs[y], $MachinePrecision]
                          y\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[y]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
                          x\_m = N[Abs[x], $MachinePrecision]
                          x\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[x]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
                          NOTE: x_m, y_m, and z should be sorted in increasing order before calling this function.
                          code[x$95$s_, y$95$s_, x$95$m_, y$95$m_, z_] := N[(x$95$s * N[(y$95$s * N[(1.0 / N[(x$95$m * y$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
                          
                          \begin{array}{l}
                          y\_m = \left|y\right|
                          \\
                          y\_s = \mathsf{copysign}\left(1, y\right)
                          \\
                          x\_m = \left|x\right|
                          \\
                          x\_s = \mathsf{copysign}\left(1, x\right)
                          \\
                          [x_m, y_m, z] = \mathsf{sort}([x_m, y_m, z])\\
                          \\
                          x\_s \cdot \left(y\_s \cdot \frac{1}{x\_m \cdot y\_m}\right)
                          \end{array}
                          
                          Derivation
                          1. Initial program 92.1%

                            \[\frac{\frac{1}{x}}{y \cdot \left(1 + z \cdot z\right)} \]
                          2. Add Preprocessing
                          3. Taylor expanded in z around 0

                            \[\leadsto \color{blue}{\frac{1}{x \cdot y}} \]
                          4. Step-by-step derivation
                            1. lower-/.f64N/A

                              \[\leadsto \color{blue}{\frac{1}{x \cdot y}} \]
                            2. *-commutativeN/A

                              \[\leadsto \frac{1}{\color{blue}{y \cdot x}} \]
                            3. lower-*.f6458.8

                              \[\leadsto \frac{1}{\color{blue}{y \cdot x}} \]
                          5. Applied rewrites58.8%

                            \[\leadsto \color{blue}{\frac{1}{y \cdot x}} \]
                          6. Final simplification58.8%

                            \[\leadsto \frac{1}{x \cdot y} \]
                          7. Add Preprocessing

                          Developer Target 1: 92.6% accurate, 0.5× speedup?

                          \[\begin{array}{l} \\ \begin{array}{l} t_0 := 1 + z \cdot z\\ t_1 := y \cdot t\_0\\ t_2 := \frac{\frac{1}{y}}{t\_0 \cdot x}\\ \mathbf{if}\;t\_1 < -\infty:\\ \;\;\;\;t\_2\\ \mathbf{elif}\;t\_1 < 8.680743250567252 \cdot 10^{+305}:\\ \;\;\;\;\frac{\frac{1}{x}}{t\_0 \cdot y}\\ \mathbf{else}:\\ \;\;\;\;t\_2\\ \end{array} \end{array} \]
                          (FPCore (x y z)
                           :precision binary64
                           (let* ((t_0 (+ 1.0 (* z z))) (t_1 (* y t_0)) (t_2 (/ (/ 1.0 y) (* t_0 x))))
                             (if (< t_1 (- INFINITY))
                               t_2
                               (if (< t_1 8.680743250567252e+305) (/ (/ 1.0 x) (* t_0 y)) t_2))))
                          double code(double x, double y, double z) {
                          	double t_0 = 1.0 + (z * z);
                          	double t_1 = y * t_0;
                          	double t_2 = (1.0 / y) / (t_0 * x);
                          	double tmp;
                          	if (t_1 < -((double) INFINITY)) {
                          		tmp = t_2;
                          	} else if (t_1 < 8.680743250567252e+305) {
                          		tmp = (1.0 / x) / (t_0 * y);
                          	} else {
                          		tmp = t_2;
                          	}
                          	return tmp;
                          }
                          
                          public static double code(double x, double y, double z) {
                          	double t_0 = 1.0 + (z * z);
                          	double t_1 = y * t_0;
                          	double t_2 = (1.0 / y) / (t_0 * x);
                          	double tmp;
                          	if (t_1 < -Double.POSITIVE_INFINITY) {
                          		tmp = t_2;
                          	} else if (t_1 < 8.680743250567252e+305) {
                          		tmp = (1.0 / x) / (t_0 * y);
                          	} else {
                          		tmp = t_2;
                          	}
                          	return tmp;
                          }
                          
                          def code(x, y, z):
                          	t_0 = 1.0 + (z * z)
                          	t_1 = y * t_0
                          	t_2 = (1.0 / y) / (t_0 * x)
                          	tmp = 0
                          	if t_1 < -math.inf:
                          		tmp = t_2
                          	elif t_1 < 8.680743250567252e+305:
                          		tmp = (1.0 / x) / (t_0 * y)
                          	else:
                          		tmp = t_2
                          	return tmp
                          
                          function code(x, y, z)
                          	t_0 = Float64(1.0 + Float64(z * z))
                          	t_1 = Float64(y * t_0)
                          	t_2 = Float64(Float64(1.0 / y) / Float64(t_0 * x))
                          	tmp = 0.0
                          	if (t_1 < Float64(-Inf))
                          		tmp = t_2;
                          	elseif (t_1 < 8.680743250567252e+305)
                          		tmp = Float64(Float64(1.0 / x) / Float64(t_0 * y));
                          	else
                          		tmp = t_2;
                          	end
                          	return tmp
                          end
                          
                          function tmp_2 = code(x, y, z)
                          	t_0 = 1.0 + (z * z);
                          	t_1 = y * t_0;
                          	t_2 = (1.0 / y) / (t_0 * x);
                          	tmp = 0.0;
                          	if (t_1 < -Inf)
                          		tmp = t_2;
                          	elseif (t_1 < 8.680743250567252e+305)
                          		tmp = (1.0 / x) / (t_0 * y);
                          	else
                          		tmp = t_2;
                          	end
                          	tmp_2 = tmp;
                          end
                          
                          code[x_, y_, z_] := Block[{t$95$0 = N[(1.0 + N[(z * z), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(y * t$95$0), $MachinePrecision]}, Block[{t$95$2 = N[(N[(1.0 / y), $MachinePrecision] / N[(t$95$0 * x), $MachinePrecision]), $MachinePrecision]}, If[Less[t$95$1, (-Infinity)], t$95$2, If[Less[t$95$1, 8.680743250567252e+305], N[(N[(1.0 / x), $MachinePrecision] / N[(t$95$0 * y), $MachinePrecision]), $MachinePrecision], t$95$2]]]]]
                          
                          \begin{array}{l}
                          
                          \\
                          \begin{array}{l}
                          t_0 := 1 + z \cdot z\\
                          t_1 := y \cdot t\_0\\
                          t_2 := \frac{\frac{1}{y}}{t\_0 \cdot x}\\
                          \mathbf{if}\;t\_1 < -\infty:\\
                          \;\;\;\;t\_2\\
                          
                          \mathbf{elif}\;t\_1 < 8.680743250567252 \cdot 10^{+305}:\\
                          \;\;\;\;\frac{\frac{1}{x}}{t\_0 \cdot y}\\
                          
                          \mathbf{else}:\\
                          \;\;\;\;t\_2\\
                          
                          
                          \end{array}
                          \end{array}
                          

                          Reproduce

                          ?
                          herbie shell --seed 2024259 
                          (FPCore (x y z)
                            :name "Statistics.Distribution.CauchyLorentz:$cdensity from math-functions-0.1.5.2"
                            :precision binary64
                          
                            :alt
                            (! :herbie-platform default (if (< (* y (+ 1 (* z z))) -inf.0) (/ (/ 1 y) (* (+ 1 (* z z)) x)) (if (< (* y (+ 1 (* z z))) 868074325056725200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) (/ (/ 1 x) (* (+ 1 (* z z)) y)) (/ (/ 1 y) (* (+ 1 (* z z)) x)))))
                          
                            (/ (/ 1.0 x) (* y (+ 1.0 (* z z)))))