Diagrams.TwoD.Apollonian:descartes from diagrams-contrib-1.3.0.5

Percentage Accurate: 70.2% → 97.5%
Time: 14.5s
Alternatives: 11
Speedup: 1.0×

Specification

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

\\
2 \cdot \sqrt{\left(x \cdot y + x \cdot z\right) + y \cdot z}
\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 11 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: 70.2% accurate, 1.0× speedup?

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

\\
2 \cdot \sqrt{\left(x \cdot y + x \cdot z\right) + y \cdot z}
\end{array}

Alternative 1: 97.5% accurate, 0.5× speedup?

\[\begin{array}{l} [x, y, z] = \mathsf{sort}([x, y, z])\\ \\ \begin{array}{l} \mathbf{if}\;y \leq -3.2 \cdot 10^{-278}:\\ \;\;\;\;2 \cdot \frac{\sqrt{z - x}}{{\left(\frac{-1}{y}\right)}^{0.5}}\\ \mathbf{else}:\\ \;\;\;\;2 \cdot \left({\left(y + x\right)}^{0.5} \cdot \sqrt{z}\right)\\ \end{array} \end{array} \]
NOTE: x, y, and z should be sorted in increasing order before calling this function.
(FPCore (x y z)
 :precision binary64
 (if (<= y -3.2e-278)
   (* 2.0 (/ (sqrt (- z x)) (pow (/ -1.0 y) 0.5)))
   (* 2.0 (* (pow (+ y x) 0.5) (sqrt z)))))
assert(x < y && y < z);
double code(double x, double y, double z) {
	double tmp;
	if (y <= -3.2e-278) {
		tmp = 2.0 * (sqrt((z - x)) / pow((-1.0 / y), 0.5));
	} else {
		tmp = 2.0 * (pow((y + x), 0.5) * sqrt(z));
	}
	return tmp;
}
NOTE: x, y, and z should be sorted in increasing order before calling this function.
real(8) function code(x, y, z)
    real(8), intent (in) :: x
    real(8), intent (in) :: y
    real(8), intent (in) :: z
    real(8) :: tmp
    if (y <= (-3.2d-278)) then
        tmp = 2.0d0 * (sqrt((z - x)) / (((-1.0d0) / y) ** 0.5d0))
    else
        tmp = 2.0d0 * (((y + x) ** 0.5d0) * sqrt(z))
    end if
    code = tmp
end function
assert x < y && y < z;
public static double code(double x, double y, double z) {
	double tmp;
	if (y <= -3.2e-278) {
		tmp = 2.0 * (Math.sqrt((z - x)) / Math.pow((-1.0 / y), 0.5));
	} else {
		tmp = 2.0 * (Math.pow((y + x), 0.5) * Math.sqrt(z));
	}
	return tmp;
}
[x, y, z] = sort([x, y, z])
def code(x, y, z):
	tmp = 0
	if y <= -3.2e-278:
		tmp = 2.0 * (math.sqrt((z - x)) / math.pow((-1.0 / y), 0.5))
	else:
		tmp = 2.0 * (math.pow((y + x), 0.5) * math.sqrt(z))
	return tmp
x, y, z = sort([x, y, z])
function code(x, y, z)
	tmp = 0.0
	if (y <= -3.2e-278)
		tmp = Float64(2.0 * Float64(sqrt(Float64(z - x)) / (Float64(-1.0 / y) ^ 0.5)));
	else
		tmp = Float64(2.0 * Float64((Float64(y + x) ^ 0.5) * sqrt(z)));
	end
	return tmp
end
x, y, z = num2cell(sort([x, y, z])){:}
function tmp_2 = code(x, y, z)
	tmp = 0.0;
	if (y <= -3.2e-278)
		tmp = 2.0 * (sqrt((z - x)) / ((-1.0 / y) ^ 0.5));
	else
		tmp = 2.0 * (((y + x) ^ 0.5) * sqrt(z));
	end
	tmp_2 = tmp;
end
NOTE: x, y, and z should be sorted in increasing order before calling this function.
code[x_, y_, z_] := If[LessEqual[y, -3.2e-278], N[(2.0 * N[(N[Sqrt[N[(z - x), $MachinePrecision]], $MachinePrecision] / N[Power[N[(-1.0 / y), $MachinePrecision], 0.5], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(2.0 * N[(N[Power[N[(y + x), $MachinePrecision], 0.5], $MachinePrecision] * N[Sqrt[z], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
[x, y, z] = \mathsf{sort}([x, y, z])\\
\\
\begin{array}{l}
\mathbf{if}\;y \leq -3.2 \cdot 10^{-278}:\\
\;\;\;\;2 \cdot \frac{\sqrt{z - x}}{{\left(\frac{-1}{y}\right)}^{0.5}}\\

\mathbf{else}:\\
\;\;\;\;2 \cdot \left({\left(y + x\right)}^{0.5} \cdot \sqrt{z}\right)\\


\end{array}
\end{array}
Derivation
  1. Split input into 2 regimes
  2. if y < -3.20000000000000018e-278

    1. Initial program 65.7%

      \[2 \cdot \sqrt{\left(x \cdot y + x \cdot z\right) + y \cdot z} \]
    2. Step-by-step derivation
      1. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \color{blue}{\left(\sqrt{\left(x \cdot y + x \cdot z\right) + y \cdot z}\right)}\right) \]
      2. sqrt-lowering-sqrt.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\left(\left(x \cdot y + x \cdot z\right) + y \cdot z\right)\right)\right) \]
      3. associate-+l+N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\left(x \cdot y + \left(x \cdot z + y \cdot z\right)\right)\right)\right) \]
      4. +-lowering-+.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\left(x \cdot y\right), \left(x \cdot z + y \cdot z\right)\right)\right)\right) \]
      5. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \left(x \cdot z + y \cdot z\right)\right)\right)\right) \]
      6. distribute-rgt-outN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \left(z \cdot \left(x + y\right)\right)\right)\right)\right) \]
      7. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \mathsf{*.f64}\left(z, \left(x + y\right)\right)\right)\right)\right) \]
      8. +-lowering-+.f6465.7%

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \mathsf{*.f64}\left(z, \mathsf{+.f64}\left(x, y\right)\right)\right)\right)\right) \]
    3. Simplified65.7%

      \[\leadsto \color{blue}{2 \cdot \sqrt{x \cdot y + z \cdot \left(x + y\right)}} \]
    4. Add Preprocessing
    5. Step-by-step derivation
      1. distribute-rgt-inN/A

        \[\leadsto \mathsf{*.f64}\left(2, \left(\sqrt{x \cdot y + \left(x \cdot z + y \cdot z\right)}\right)\right) \]
      2. associate-+l+N/A

        \[\leadsto \mathsf{*.f64}\left(2, \left(\sqrt{\left(x \cdot y + x \cdot z\right) + y \cdot z}\right)\right) \]
      3. flip3-+N/A

        \[\leadsto \mathsf{*.f64}\left(2, \left(\sqrt{\frac{{\left(x \cdot y + x \cdot z\right)}^{3} + {\left(y \cdot z\right)}^{3}}{\left(x \cdot y + x \cdot z\right) \cdot \left(x \cdot y + x \cdot z\right) + \left(\left(y \cdot z\right) \cdot \left(y \cdot z\right) - \left(x \cdot y + x \cdot z\right) \cdot \left(y \cdot z\right)\right)}}\right)\right) \]
      4. clear-numN/A

        \[\leadsto \mathsf{*.f64}\left(2, \left(\sqrt{\frac{1}{\frac{\left(x \cdot y + x \cdot z\right) \cdot \left(x \cdot y + x \cdot z\right) + \left(\left(y \cdot z\right) \cdot \left(y \cdot z\right) - \left(x \cdot y + x \cdot z\right) \cdot \left(y \cdot z\right)\right)}{{\left(x \cdot y + x \cdot z\right)}^{3} + {\left(y \cdot z\right)}^{3}}}}\right)\right) \]
      5. sqrt-divN/A

        \[\leadsto \mathsf{*.f64}\left(2, \left(\frac{\sqrt{1}}{\color{blue}{\sqrt{\frac{\left(x \cdot y + x \cdot z\right) \cdot \left(x \cdot y + x \cdot z\right) + \left(\left(y \cdot z\right) \cdot \left(y \cdot z\right) - \left(x \cdot y + x \cdot z\right) \cdot \left(y \cdot z\right)\right)}{{\left(x \cdot y + x \cdot z\right)}^{3} + {\left(y \cdot z\right)}^{3}}}}}\right)\right) \]
      6. metadata-evalN/A

        \[\leadsto \mathsf{*.f64}\left(2, \left(\frac{1}{\sqrt{\color{blue}{\frac{\left(x \cdot y + x \cdot z\right) \cdot \left(x \cdot y + x \cdot z\right) + \left(\left(y \cdot z\right) \cdot \left(y \cdot z\right) - \left(x \cdot y + x \cdot z\right) \cdot \left(y \cdot z\right)\right)}{{\left(x \cdot y + x \cdot z\right)}^{3} + {\left(y \cdot z\right)}^{3}}}}}\right)\right) \]
      7. /-lowering-/.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \color{blue}{\left(\sqrt{\frac{\left(x \cdot y + x \cdot z\right) \cdot \left(x \cdot y + x \cdot z\right) + \left(\left(y \cdot z\right) \cdot \left(y \cdot z\right) - \left(x \cdot y + x \cdot z\right) \cdot \left(y \cdot z\right)\right)}{{\left(x \cdot y + x \cdot z\right)}^{3} + {\left(y \cdot z\right)}^{3}}}\right)}\right)\right) \]
    6. Applied egg-rr65.5%

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

      \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\color{blue}{\left(\frac{-1}{y \cdot \left(-1 \cdot x + -1 \cdot z\right)}\right)}\right)\right)\right) \]
    8. Step-by-step derivation
      1. associate-/r*N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\left(\frac{\frac{-1}{y}}{-1 \cdot x + -1 \cdot z}\right)\right)\right)\right) \]
      2. /-lowering-/.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\left(\frac{-1}{y}\right), \left(-1 \cdot x + -1 \cdot z\right)\right)\right)\right)\right) \]
      3. /-lowering-/.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(-1, y\right), \left(-1 \cdot x + -1 \cdot z\right)\right)\right)\right)\right) \]
      4. +-commutativeN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(-1, y\right), \left(-1 \cdot z + -1 \cdot x\right)\right)\right)\right)\right) \]
      5. mul-1-negN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(-1, y\right), \left(-1 \cdot z + \left(\mathsf{neg}\left(x\right)\right)\right)\right)\right)\right)\right) \]
      6. unsub-negN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(-1, y\right), \left(-1 \cdot z - x\right)\right)\right)\right)\right) \]
      7. --lowering--.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(-1, y\right), \mathsf{\_.f64}\left(\left(-1 \cdot z\right), x\right)\right)\right)\right)\right) \]
      8. mul-1-negN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(-1, y\right), \mathsf{\_.f64}\left(\left(\mathsf{neg}\left(z\right)\right), x\right)\right)\right)\right)\right) \]
      9. neg-sub0N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(-1, y\right), \mathsf{\_.f64}\left(\left(0 - z\right), x\right)\right)\right)\right)\right) \]
      10. --lowering--.f6450.4%

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(-1, y\right), \mathsf{\_.f64}\left(\mathsf{\_.f64}\left(0, z\right), x\right)\right)\right)\right)\right) \]
    9. Simplified50.4%

      \[\leadsto 2 \cdot \frac{1}{\sqrt{\color{blue}{\frac{\frac{-1}{y}}{\left(0 - z\right) - x}}}} \]
    10. Step-by-step derivation
      1. sqrt-divN/A

        \[\leadsto \mathsf{*.f64}\left(2, \left(\frac{1}{\frac{\sqrt{\frac{-1}{y}}}{\color{blue}{\sqrt{\left(0 - z\right) - x}}}}\right)\right) \]
      2. clear-numN/A

        \[\leadsto \mathsf{*.f64}\left(2, \left(\frac{\sqrt{\left(0 - z\right) - x}}{\color{blue}{\sqrt{\frac{-1}{y}}}}\right)\right) \]
      3. /-lowering-/.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(\left(\sqrt{\left(0 - z\right) - x}\right), \color{blue}{\left(\sqrt{\frac{-1}{y}}\right)}\right)\right) \]
    11. Applied egg-rr38.7%

      \[\leadsto 2 \cdot \color{blue}{\frac{\sqrt{z - x}}{{\left(\frac{-1}{y}\right)}^{0.5}}} \]

    if -3.20000000000000018e-278 < y

    1. Initial program 72.2%

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

      \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\color{blue}{\left(x \cdot z\right)}, \mathsf{*.f64}\left(y, z\right)\right)\right)\right) \]
    4. Step-by-step derivation
      1. *-commutativeN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\left(z \cdot x\right), \mathsf{*.f64}\left(y, z\right)\right)\right)\right) \]
      2. *-lowering-*.f6449.9%

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(z, x\right), \mathsf{*.f64}\left(y, z\right)\right)\right)\right) \]
    5. Simplified49.9%

      \[\leadsto 2 \cdot \sqrt{\color{blue}{z \cdot x} + y \cdot z} \]
    6. Step-by-step derivation
      1. pow1/2N/A

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

        \[\leadsto \mathsf{*.f64}\left(2, \left({\left(x \cdot z + y \cdot z\right)}^{\frac{1}{2}}\right)\right) \]
      3. distribute-rgt-inN/A

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

        \[\leadsto \mathsf{*.f64}\left(2, \left({\left(\left(x + y\right) \cdot z\right)}^{\frac{1}{2}}\right)\right) \]
      5. unpow-prod-downN/A

        \[\leadsto \mathsf{*.f64}\left(2, \left({\left(x + y\right)}^{\frac{1}{2}} \cdot \color{blue}{{z}^{\frac{1}{2}}}\right)\right) \]
      6. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{*.f64}\left(\left({\left(x + y\right)}^{\frac{1}{2}}\right), \color{blue}{\left({z}^{\frac{1}{2}}\right)}\right)\right) \]
      7. pow-lowering-pow.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{*.f64}\left(\mathsf{pow.f64}\left(\left(x + y\right), \frac{1}{2}\right), \left({\color{blue}{z}}^{\frac{1}{2}}\right)\right)\right) \]
      8. +-lowering-+.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{*.f64}\left(\mathsf{pow.f64}\left(\mathsf{+.f64}\left(x, y\right), \frac{1}{2}\right), \left({z}^{\frac{1}{2}}\right)\right)\right) \]
      9. pow1/2N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{*.f64}\left(\mathsf{pow.f64}\left(\mathsf{+.f64}\left(x, y\right), \frac{1}{2}\right), \left(\sqrt{z}\right)\right)\right) \]
      10. sqrt-lowering-sqrt.f6455.2%

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{*.f64}\left(\mathsf{pow.f64}\left(\mathsf{+.f64}\left(x, y\right), \frac{1}{2}\right), \mathsf{sqrt.f64}\left(z\right)\right)\right) \]
    7. Applied egg-rr55.2%

      \[\leadsto 2 \cdot \color{blue}{\left({\left(x + y\right)}^{0.5} \cdot \sqrt{z}\right)} \]
  3. Recombined 2 regimes into one program.
  4. Final simplification47.3%

    \[\leadsto \begin{array}{l} \mathbf{if}\;y \leq -3.2 \cdot 10^{-278}:\\ \;\;\;\;2 \cdot \frac{\sqrt{z - x}}{{\left(\frac{-1}{y}\right)}^{0.5}}\\ \mathbf{else}:\\ \;\;\;\;2 \cdot \left({\left(y + x\right)}^{0.5} \cdot \sqrt{z}\right)\\ \end{array} \]
  5. Add Preprocessing

Alternative 2: 83.8% accurate, 0.5× speedup?

\[\begin{array}{l} [x, y, z] = \mathsf{sort}([x, y, z])\\ \\ \begin{array}{l} \mathbf{if}\;y \leq -3.2 \cdot 10^{-278}:\\ \;\;\;\;2 \cdot {\left(\frac{\frac{1}{z + x}}{y}\right)}^{-0.5}\\ \mathbf{else}:\\ \;\;\;\;2 \cdot \left({\left(y + x\right)}^{0.5} \cdot \sqrt{z}\right)\\ \end{array} \end{array} \]
NOTE: x, y, and z should be sorted in increasing order before calling this function.
(FPCore (x y z)
 :precision binary64
 (if (<= y -3.2e-278)
   (* 2.0 (pow (/ (/ 1.0 (+ z x)) y) -0.5))
   (* 2.0 (* (pow (+ y x) 0.5) (sqrt z)))))
assert(x < y && y < z);
double code(double x, double y, double z) {
	double tmp;
	if (y <= -3.2e-278) {
		tmp = 2.0 * pow(((1.0 / (z + x)) / y), -0.5);
	} else {
		tmp = 2.0 * (pow((y + x), 0.5) * sqrt(z));
	}
	return tmp;
}
NOTE: x, y, and z should be sorted in increasing order before calling this function.
real(8) function code(x, y, z)
    real(8), intent (in) :: x
    real(8), intent (in) :: y
    real(8), intent (in) :: z
    real(8) :: tmp
    if (y <= (-3.2d-278)) then
        tmp = 2.0d0 * (((1.0d0 / (z + x)) / y) ** (-0.5d0))
    else
        tmp = 2.0d0 * (((y + x) ** 0.5d0) * sqrt(z))
    end if
    code = tmp
end function
assert x < y && y < z;
public static double code(double x, double y, double z) {
	double tmp;
	if (y <= -3.2e-278) {
		tmp = 2.0 * Math.pow(((1.0 / (z + x)) / y), -0.5);
	} else {
		tmp = 2.0 * (Math.pow((y + x), 0.5) * Math.sqrt(z));
	}
	return tmp;
}
[x, y, z] = sort([x, y, z])
def code(x, y, z):
	tmp = 0
	if y <= -3.2e-278:
		tmp = 2.0 * math.pow(((1.0 / (z + x)) / y), -0.5)
	else:
		tmp = 2.0 * (math.pow((y + x), 0.5) * math.sqrt(z))
	return tmp
x, y, z = sort([x, y, z])
function code(x, y, z)
	tmp = 0.0
	if (y <= -3.2e-278)
		tmp = Float64(2.0 * (Float64(Float64(1.0 / Float64(z + x)) / y) ^ -0.5));
	else
		tmp = Float64(2.0 * Float64((Float64(y + x) ^ 0.5) * sqrt(z)));
	end
	return tmp
end
x, y, z = num2cell(sort([x, y, z])){:}
function tmp_2 = code(x, y, z)
	tmp = 0.0;
	if (y <= -3.2e-278)
		tmp = 2.0 * (((1.0 / (z + x)) / y) ^ -0.5);
	else
		tmp = 2.0 * (((y + x) ^ 0.5) * sqrt(z));
	end
	tmp_2 = tmp;
end
NOTE: x, y, and z should be sorted in increasing order before calling this function.
code[x_, y_, z_] := If[LessEqual[y, -3.2e-278], N[(2.0 * N[Power[N[(N[(1.0 / N[(z + x), $MachinePrecision]), $MachinePrecision] / y), $MachinePrecision], -0.5], $MachinePrecision]), $MachinePrecision], N[(2.0 * N[(N[Power[N[(y + x), $MachinePrecision], 0.5], $MachinePrecision] * N[Sqrt[z], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
[x, y, z] = \mathsf{sort}([x, y, z])\\
\\
\begin{array}{l}
\mathbf{if}\;y \leq -3.2 \cdot 10^{-278}:\\
\;\;\;\;2 \cdot {\left(\frac{\frac{1}{z + x}}{y}\right)}^{-0.5}\\

\mathbf{else}:\\
\;\;\;\;2 \cdot \left({\left(y + x\right)}^{0.5} \cdot \sqrt{z}\right)\\


\end{array}
\end{array}
Derivation
  1. Split input into 2 regimes
  2. if y < -3.20000000000000018e-278

    1. Initial program 65.7%

      \[2 \cdot \sqrt{\left(x \cdot y + x \cdot z\right) + y \cdot z} \]
    2. Step-by-step derivation
      1. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \color{blue}{\left(\sqrt{\left(x \cdot y + x \cdot z\right) + y \cdot z}\right)}\right) \]
      2. sqrt-lowering-sqrt.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\left(\left(x \cdot y + x \cdot z\right) + y \cdot z\right)\right)\right) \]
      3. associate-+l+N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\left(x \cdot y + \left(x \cdot z + y \cdot z\right)\right)\right)\right) \]
      4. +-lowering-+.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\left(x \cdot y\right), \left(x \cdot z + y \cdot z\right)\right)\right)\right) \]
      5. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \left(x \cdot z + y \cdot z\right)\right)\right)\right) \]
      6. distribute-rgt-outN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \left(z \cdot \left(x + y\right)\right)\right)\right)\right) \]
      7. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \mathsf{*.f64}\left(z, \left(x + y\right)\right)\right)\right)\right) \]
      8. +-lowering-+.f6465.7%

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \mathsf{*.f64}\left(z, \mathsf{+.f64}\left(x, y\right)\right)\right)\right)\right) \]
    3. Simplified65.7%

      \[\leadsto \color{blue}{2 \cdot \sqrt{x \cdot y + z \cdot \left(x + y\right)}} \]
    4. Add Preprocessing
    5. Step-by-step derivation
      1. distribute-rgt-inN/A

        \[\leadsto \mathsf{*.f64}\left(2, \left(\sqrt{x \cdot y + \left(x \cdot z + y \cdot z\right)}\right)\right) \]
      2. associate-+l+N/A

        \[\leadsto \mathsf{*.f64}\left(2, \left(\sqrt{\left(x \cdot y + x \cdot z\right) + y \cdot z}\right)\right) \]
      3. flip3-+N/A

        \[\leadsto \mathsf{*.f64}\left(2, \left(\sqrt{\frac{{\left(x \cdot y + x \cdot z\right)}^{3} + {\left(y \cdot z\right)}^{3}}{\left(x \cdot y + x \cdot z\right) \cdot \left(x \cdot y + x \cdot z\right) + \left(\left(y \cdot z\right) \cdot \left(y \cdot z\right) - \left(x \cdot y + x \cdot z\right) \cdot \left(y \cdot z\right)\right)}}\right)\right) \]
      4. clear-numN/A

        \[\leadsto \mathsf{*.f64}\left(2, \left(\sqrt{\frac{1}{\frac{\left(x \cdot y + x \cdot z\right) \cdot \left(x \cdot y + x \cdot z\right) + \left(\left(y \cdot z\right) \cdot \left(y \cdot z\right) - \left(x \cdot y + x \cdot z\right) \cdot \left(y \cdot z\right)\right)}{{\left(x \cdot y + x \cdot z\right)}^{3} + {\left(y \cdot z\right)}^{3}}}}\right)\right) \]
      5. sqrt-divN/A

        \[\leadsto \mathsf{*.f64}\left(2, \left(\frac{\sqrt{1}}{\color{blue}{\sqrt{\frac{\left(x \cdot y + x \cdot z\right) \cdot \left(x \cdot y + x \cdot z\right) + \left(\left(y \cdot z\right) \cdot \left(y \cdot z\right) - \left(x \cdot y + x \cdot z\right) \cdot \left(y \cdot z\right)\right)}{{\left(x \cdot y + x \cdot z\right)}^{3} + {\left(y \cdot z\right)}^{3}}}}}\right)\right) \]
      6. metadata-evalN/A

        \[\leadsto \mathsf{*.f64}\left(2, \left(\frac{1}{\sqrt{\color{blue}{\frac{\left(x \cdot y + x \cdot z\right) \cdot \left(x \cdot y + x \cdot z\right) + \left(\left(y \cdot z\right) \cdot \left(y \cdot z\right) - \left(x \cdot y + x \cdot z\right) \cdot \left(y \cdot z\right)\right)}{{\left(x \cdot y + x \cdot z\right)}^{3} + {\left(y \cdot z\right)}^{3}}}}}\right)\right) \]
      7. /-lowering-/.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \color{blue}{\left(\sqrt{\frac{\left(x \cdot y + x \cdot z\right) \cdot \left(x \cdot y + x \cdot z\right) + \left(\left(y \cdot z\right) \cdot \left(y \cdot z\right) - \left(x \cdot y + x \cdot z\right) \cdot \left(y \cdot z\right)\right)}{{\left(x \cdot y + x \cdot z\right)}^{3} + {\left(y \cdot z\right)}^{3}}}\right)}\right)\right) \]
    6. Applied egg-rr65.5%

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

      \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\color{blue}{\left(\frac{-1}{y \cdot \left(-1 \cdot x + -1 \cdot z\right)}\right)}\right)\right)\right) \]
    8. Step-by-step derivation
      1. associate-/r*N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\left(\frac{\frac{-1}{y}}{-1 \cdot x + -1 \cdot z}\right)\right)\right)\right) \]
      2. /-lowering-/.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\left(\frac{-1}{y}\right), \left(-1 \cdot x + -1 \cdot z\right)\right)\right)\right)\right) \]
      3. /-lowering-/.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(-1, y\right), \left(-1 \cdot x + -1 \cdot z\right)\right)\right)\right)\right) \]
      4. +-commutativeN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(-1, y\right), \left(-1 \cdot z + -1 \cdot x\right)\right)\right)\right)\right) \]
      5. mul-1-negN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(-1, y\right), \left(-1 \cdot z + \left(\mathsf{neg}\left(x\right)\right)\right)\right)\right)\right)\right) \]
      6. unsub-negN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(-1, y\right), \left(-1 \cdot z - x\right)\right)\right)\right)\right) \]
      7. --lowering--.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(-1, y\right), \mathsf{\_.f64}\left(\left(-1 \cdot z\right), x\right)\right)\right)\right)\right) \]
      8. mul-1-negN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(-1, y\right), \mathsf{\_.f64}\left(\left(\mathsf{neg}\left(z\right)\right), x\right)\right)\right)\right)\right) \]
      9. neg-sub0N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(-1, y\right), \mathsf{\_.f64}\left(\left(0 - z\right), x\right)\right)\right)\right)\right) \]
      10. --lowering--.f6450.4%

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(-1, y\right), \mathsf{\_.f64}\left(\mathsf{\_.f64}\left(0, z\right), x\right)\right)\right)\right)\right) \]
    9. Simplified50.4%

      \[\leadsto 2 \cdot \frac{1}{\sqrt{\color{blue}{\frac{\frac{-1}{y}}{\left(0 - z\right) - x}}}} \]
    10. Step-by-step derivation
      1. pow1/2N/A

        \[\leadsto \mathsf{*.f64}\left(2, \left(\frac{1}{{\left(\frac{\frac{-1}{y}}{\left(0 - z\right) - x}\right)}^{\color{blue}{\frac{1}{2}}}}\right)\right) \]
      2. pow-flipN/A

        \[\leadsto \mathsf{*.f64}\left(2, \left({\left(\frac{\frac{-1}{y}}{\left(0 - z\right) - x}\right)}^{\color{blue}{\left(\mathsf{neg}\left(\frac{1}{2}\right)\right)}}\right)\right) \]
      3. metadata-evalN/A

        \[\leadsto \mathsf{*.f64}\left(2, \left({\left(\frac{\frac{-1}{y}}{\left(0 - z\right) - x}\right)}^{\frac{-1}{2}}\right)\right) \]
      4. pow-lowering-pow.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\left(\frac{\frac{-1}{y}}{\left(0 - z\right) - x}\right), \color{blue}{\frac{-1}{2}}\right)\right) \]
      5. associate-/l/N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\left(\frac{-1}{\left(\left(0 - z\right) - x\right) \cdot y}\right), \frac{-1}{2}\right)\right) \]
      6. associate-/r*N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\left(\frac{\frac{-1}{\left(0 - z\right) - x}}{y}\right), \frac{-1}{2}\right)\right) \]
      7. frac-2negN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\left(\frac{\frac{\mathsf{neg}\left(-1\right)}{\mathsf{neg}\left(\left(\left(0 - z\right) - x\right)\right)}}{y}\right), \frac{-1}{2}\right)\right) \]
      8. metadata-evalN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\left(\frac{\frac{1}{\mathsf{neg}\left(\left(\left(0 - z\right) - x\right)\right)}}{y}\right), \frac{-1}{2}\right)\right) \]
      9. /-lowering-/.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\mathsf{/.f64}\left(\left(\frac{1}{\mathsf{neg}\left(\left(\left(0 - z\right) - x\right)\right)}\right), y\right), \frac{-1}{2}\right)\right) \]
      10. associate--l-N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\mathsf{/.f64}\left(\left(\frac{1}{\mathsf{neg}\left(\left(0 - \left(z + x\right)\right)\right)}\right), y\right), \frac{-1}{2}\right)\right) \]
      11. sub0-negN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\mathsf{/.f64}\left(\left(\frac{1}{\mathsf{neg}\left(\left(\mathsf{neg}\left(\left(z + x\right)\right)\right)\right)}\right), y\right), \frac{-1}{2}\right)\right) \]
      12. remove-double-negN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\mathsf{/.f64}\left(\left(\frac{1}{z + x}\right), y\right), \frac{-1}{2}\right)\right) \]
      13. /-lowering-/.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(1, \left(z + x\right)\right), y\right), \frac{-1}{2}\right)\right) \]
      14. +-lowering-+.f6450.4%

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(1, \mathsf{+.f64}\left(z, x\right)\right), y\right), \frac{-1}{2}\right)\right) \]
    11. Applied egg-rr50.4%

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

    if -3.20000000000000018e-278 < y

    1. Initial program 72.2%

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

      \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\color{blue}{\left(x \cdot z\right)}, \mathsf{*.f64}\left(y, z\right)\right)\right)\right) \]
    4. Step-by-step derivation
      1. *-commutativeN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\left(z \cdot x\right), \mathsf{*.f64}\left(y, z\right)\right)\right)\right) \]
      2. *-lowering-*.f6449.9%

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(z, x\right), \mathsf{*.f64}\left(y, z\right)\right)\right)\right) \]
    5. Simplified49.9%

      \[\leadsto 2 \cdot \sqrt{\color{blue}{z \cdot x} + y \cdot z} \]
    6. Step-by-step derivation
      1. pow1/2N/A

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

        \[\leadsto \mathsf{*.f64}\left(2, \left({\left(x \cdot z + y \cdot z\right)}^{\frac{1}{2}}\right)\right) \]
      3. distribute-rgt-inN/A

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

        \[\leadsto \mathsf{*.f64}\left(2, \left({\left(\left(x + y\right) \cdot z\right)}^{\frac{1}{2}}\right)\right) \]
      5. unpow-prod-downN/A

        \[\leadsto \mathsf{*.f64}\left(2, \left({\left(x + y\right)}^{\frac{1}{2}} \cdot \color{blue}{{z}^{\frac{1}{2}}}\right)\right) \]
      6. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{*.f64}\left(\left({\left(x + y\right)}^{\frac{1}{2}}\right), \color{blue}{\left({z}^{\frac{1}{2}}\right)}\right)\right) \]
      7. pow-lowering-pow.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{*.f64}\left(\mathsf{pow.f64}\left(\left(x + y\right), \frac{1}{2}\right), \left({\color{blue}{z}}^{\frac{1}{2}}\right)\right)\right) \]
      8. +-lowering-+.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{*.f64}\left(\mathsf{pow.f64}\left(\mathsf{+.f64}\left(x, y\right), \frac{1}{2}\right), \left({z}^{\frac{1}{2}}\right)\right)\right) \]
      9. pow1/2N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{*.f64}\left(\mathsf{pow.f64}\left(\mathsf{+.f64}\left(x, y\right), \frac{1}{2}\right), \left(\sqrt{z}\right)\right)\right) \]
      10. sqrt-lowering-sqrt.f6455.2%

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{*.f64}\left(\mathsf{pow.f64}\left(\mathsf{+.f64}\left(x, y\right), \frac{1}{2}\right), \mathsf{sqrt.f64}\left(z\right)\right)\right) \]
    7. Applied egg-rr55.2%

      \[\leadsto 2 \cdot \color{blue}{\left({\left(x + y\right)}^{0.5} \cdot \sqrt{z}\right)} \]
  3. Recombined 2 regimes into one program.
  4. Final simplification52.9%

    \[\leadsto \begin{array}{l} \mathbf{if}\;y \leq -3.2 \cdot 10^{-278}:\\ \;\;\;\;2 \cdot {\left(\frac{\frac{1}{z + x}}{y}\right)}^{-0.5}\\ \mathbf{else}:\\ \;\;\;\;2 \cdot \left({\left(y + x\right)}^{0.5} \cdot \sqrt{z}\right)\\ \end{array} \]
  5. Add Preprocessing

Alternative 3: 82.5% accurate, 0.5× speedup?

\[\begin{array}{l} [x, y, z] = \mathsf{sort}([x, y, z])\\ \\ \begin{array}{l} \mathbf{if}\;y \leq 5.8 \cdot 10^{-271}:\\ \;\;\;\;2 \cdot {\left(\frac{\frac{1}{z + x}}{y}\right)}^{-0.5}\\ \mathbf{else}:\\ \;\;\;\;\left(2 \cdot \sqrt{z}\right) \cdot \sqrt{y}\\ \end{array} \end{array} \]
NOTE: x, y, and z should be sorted in increasing order before calling this function.
(FPCore (x y z)
 :precision binary64
 (if (<= y 5.8e-271)
   (* 2.0 (pow (/ (/ 1.0 (+ z x)) y) -0.5))
   (* (* 2.0 (sqrt z)) (sqrt y))))
assert(x < y && y < z);
double code(double x, double y, double z) {
	double tmp;
	if (y <= 5.8e-271) {
		tmp = 2.0 * pow(((1.0 / (z + x)) / y), -0.5);
	} else {
		tmp = (2.0 * sqrt(z)) * sqrt(y);
	}
	return tmp;
}
NOTE: x, y, and z should be sorted in increasing order before calling this function.
real(8) function code(x, y, z)
    real(8), intent (in) :: x
    real(8), intent (in) :: y
    real(8), intent (in) :: z
    real(8) :: tmp
    if (y <= 5.8d-271) then
        tmp = 2.0d0 * (((1.0d0 / (z + x)) / y) ** (-0.5d0))
    else
        tmp = (2.0d0 * sqrt(z)) * sqrt(y)
    end if
    code = tmp
end function
assert x < y && y < z;
public static double code(double x, double y, double z) {
	double tmp;
	if (y <= 5.8e-271) {
		tmp = 2.0 * Math.pow(((1.0 / (z + x)) / y), -0.5);
	} else {
		tmp = (2.0 * Math.sqrt(z)) * Math.sqrt(y);
	}
	return tmp;
}
[x, y, z] = sort([x, y, z])
def code(x, y, z):
	tmp = 0
	if y <= 5.8e-271:
		tmp = 2.0 * math.pow(((1.0 / (z + x)) / y), -0.5)
	else:
		tmp = (2.0 * math.sqrt(z)) * math.sqrt(y)
	return tmp
x, y, z = sort([x, y, z])
function code(x, y, z)
	tmp = 0.0
	if (y <= 5.8e-271)
		tmp = Float64(2.0 * (Float64(Float64(1.0 / Float64(z + x)) / y) ^ -0.5));
	else
		tmp = Float64(Float64(2.0 * sqrt(z)) * sqrt(y));
	end
	return tmp
end
x, y, z = num2cell(sort([x, y, z])){:}
function tmp_2 = code(x, y, z)
	tmp = 0.0;
	if (y <= 5.8e-271)
		tmp = 2.0 * (((1.0 / (z + x)) / y) ^ -0.5);
	else
		tmp = (2.0 * sqrt(z)) * sqrt(y);
	end
	tmp_2 = tmp;
end
NOTE: x, y, and z should be sorted in increasing order before calling this function.
code[x_, y_, z_] := If[LessEqual[y, 5.8e-271], N[(2.0 * N[Power[N[(N[(1.0 / N[(z + x), $MachinePrecision]), $MachinePrecision] / y), $MachinePrecision], -0.5], $MachinePrecision]), $MachinePrecision], N[(N[(2.0 * N[Sqrt[z], $MachinePrecision]), $MachinePrecision] * N[Sqrt[y], $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
[x, y, z] = \mathsf{sort}([x, y, z])\\
\\
\begin{array}{l}
\mathbf{if}\;y \leq 5.8 \cdot 10^{-271}:\\
\;\;\;\;2 \cdot {\left(\frac{\frac{1}{z + x}}{y}\right)}^{-0.5}\\

\mathbf{else}:\\
\;\;\;\;\left(2 \cdot \sqrt{z}\right) \cdot \sqrt{y}\\


\end{array}
\end{array}
Derivation
  1. Split input into 2 regimes
  2. if y < 5.80000000000000028e-271

    1. Initial program 68.3%

      \[2 \cdot \sqrt{\left(x \cdot y + x \cdot z\right) + y \cdot z} \]
    2. Step-by-step derivation
      1. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \color{blue}{\left(\sqrt{\left(x \cdot y + x \cdot z\right) + y \cdot z}\right)}\right) \]
      2. sqrt-lowering-sqrt.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\left(\left(x \cdot y + x \cdot z\right) + y \cdot z\right)\right)\right) \]
      3. associate-+l+N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\left(x \cdot y + \left(x \cdot z + y \cdot z\right)\right)\right)\right) \]
      4. +-lowering-+.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\left(x \cdot y\right), \left(x \cdot z + y \cdot z\right)\right)\right)\right) \]
      5. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \left(x \cdot z + y \cdot z\right)\right)\right)\right) \]
      6. distribute-rgt-outN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \left(z \cdot \left(x + y\right)\right)\right)\right)\right) \]
      7. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \mathsf{*.f64}\left(z, \left(x + y\right)\right)\right)\right)\right) \]
      8. +-lowering-+.f6468.3%

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \mathsf{*.f64}\left(z, \mathsf{+.f64}\left(x, y\right)\right)\right)\right)\right) \]
    3. Simplified68.3%

      \[\leadsto \color{blue}{2 \cdot \sqrt{x \cdot y + z \cdot \left(x + y\right)}} \]
    4. Add Preprocessing
    5. Step-by-step derivation
      1. distribute-rgt-inN/A

        \[\leadsto \mathsf{*.f64}\left(2, \left(\sqrt{x \cdot y + \left(x \cdot z + y \cdot z\right)}\right)\right) \]
      2. associate-+l+N/A

        \[\leadsto \mathsf{*.f64}\left(2, \left(\sqrt{\left(x \cdot y + x \cdot z\right) + y \cdot z}\right)\right) \]
      3. flip3-+N/A

        \[\leadsto \mathsf{*.f64}\left(2, \left(\sqrt{\frac{{\left(x \cdot y + x \cdot z\right)}^{3} + {\left(y \cdot z\right)}^{3}}{\left(x \cdot y + x \cdot z\right) \cdot \left(x \cdot y + x \cdot z\right) + \left(\left(y \cdot z\right) \cdot \left(y \cdot z\right) - \left(x \cdot y + x \cdot z\right) \cdot \left(y \cdot z\right)\right)}}\right)\right) \]
      4. clear-numN/A

        \[\leadsto \mathsf{*.f64}\left(2, \left(\sqrt{\frac{1}{\frac{\left(x \cdot y + x \cdot z\right) \cdot \left(x \cdot y + x \cdot z\right) + \left(\left(y \cdot z\right) \cdot \left(y \cdot z\right) - \left(x \cdot y + x \cdot z\right) \cdot \left(y \cdot z\right)\right)}{{\left(x \cdot y + x \cdot z\right)}^{3} + {\left(y \cdot z\right)}^{3}}}}\right)\right) \]
      5. sqrt-divN/A

        \[\leadsto \mathsf{*.f64}\left(2, \left(\frac{\sqrt{1}}{\color{blue}{\sqrt{\frac{\left(x \cdot y + x \cdot z\right) \cdot \left(x \cdot y + x \cdot z\right) + \left(\left(y \cdot z\right) \cdot \left(y \cdot z\right) - \left(x \cdot y + x \cdot z\right) \cdot \left(y \cdot z\right)\right)}{{\left(x \cdot y + x \cdot z\right)}^{3} + {\left(y \cdot z\right)}^{3}}}}}\right)\right) \]
      6. metadata-evalN/A

        \[\leadsto \mathsf{*.f64}\left(2, \left(\frac{1}{\sqrt{\color{blue}{\frac{\left(x \cdot y + x \cdot z\right) \cdot \left(x \cdot y + x \cdot z\right) + \left(\left(y \cdot z\right) \cdot \left(y \cdot z\right) - \left(x \cdot y + x \cdot z\right) \cdot \left(y \cdot z\right)\right)}{{\left(x \cdot y + x \cdot z\right)}^{3} + {\left(y \cdot z\right)}^{3}}}}}\right)\right) \]
      7. /-lowering-/.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \color{blue}{\left(\sqrt{\frac{\left(x \cdot y + x \cdot z\right) \cdot \left(x \cdot y + x \cdot z\right) + \left(\left(y \cdot z\right) \cdot \left(y \cdot z\right) - \left(x \cdot y + x \cdot z\right) \cdot \left(y \cdot z\right)\right)}{{\left(x \cdot y + x \cdot z\right)}^{3} + {\left(y \cdot z\right)}^{3}}}\right)}\right)\right) \]
    6. Applied egg-rr68.1%

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

      \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\color{blue}{\left(\frac{-1}{y \cdot \left(-1 \cdot x + -1 \cdot z\right)}\right)}\right)\right)\right) \]
    8. Step-by-step derivation
      1. associate-/r*N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\left(\frac{\frac{-1}{y}}{-1 \cdot x + -1 \cdot z}\right)\right)\right)\right) \]
      2. /-lowering-/.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\left(\frac{-1}{y}\right), \left(-1 \cdot x + -1 \cdot z\right)\right)\right)\right)\right) \]
      3. /-lowering-/.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(-1, y\right), \left(-1 \cdot x + -1 \cdot z\right)\right)\right)\right)\right) \]
      4. +-commutativeN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(-1, y\right), \left(-1 \cdot z + -1 \cdot x\right)\right)\right)\right)\right) \]
      5. mul-1-negN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(-1, y\right), \left(-1 \cdot z + \left(\mathsf{neg}\left(x\right)\right)\right)\right)\right)\right)\right) \]
      6. unsub-negN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(-1, y\right), \left(-1 \cdot z - x\right)\right)\right)\right)\right) \]
      7. --lowering--.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(-1, y\right), \mathsf{\_.f64}\left(\left(-1 \cdot z\right), x\right)\right)\right)\right)\right) \]
      8. mul-1-negN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(-1, y\right), \mathsf{\_.f64}\left(\left(\mathsf{neg}\left(z\right)\right), x\right)\right)\right)\right)\right) \]
      9. neg-sub0N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(-1, y\right), \mathsf{\_.f64}\left(\left(0 - z\right), x\right)\right)\right)\right)\right) \]
      10. --lowering--.f6444.7%

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(-1, y\right), \mathsf{\_.f64}\left(\mathsf{\_.f64}\left(0, z\right), x\right)\right)\right)\right)\right) \]
    9. Simplified44.7%

      \[\leadsto 2 \cdot \frac{1}{\sqrt{\color{blue}{\frac{\frac{-1}{y}}{\left(0 - z\right) - x}}}} \]
    10. Step-by-step derivation
      1. pow1/2N/A

        \[\leadsto \mathsf{*.f64}\left(2, \left(\frac{1}{{\left(\frac{\frac{-1}{y}}{\left(0 - z\right) - x}\right)}^{\color{blue}{\frac{1}{2}}}}\right)\right) \]
      2. pow-flipN/A

        \[\leadsto \mathsf{*.f64}\left(2, \left({\left(\frac{\frac{-1}{y}}{\left(0 - z\right) - x}\right)}^{\color{blue}{\left(\mathsf{neg}\left(\frac{1}{2}\right)\right)}}\right)\right) \]
      3. metadata-evalN/A

        \[\leadsto \mathsf{*.f64}\left(2, \left({\left(\frac{\frac{-1}{y}}{\left(0 - z\right) - x}\right)}^{\frac{-1}{2}}\right)\right) \]
      4. pow-lowering-pow.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\left(\frac{\frac{-1}{y}}{\left(0 - z\right) - x}\right), \color{blue}{\frac{-1}{2}}\right)\right) \]
      5. associate-/l/N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\left(\frac{-1}{\left(\left(0 - z\right) - x\right) \cdot y}\right), \frac{-1}{2}\right)\right) \]
      6. associate-/r*N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\left(\frac{\frac{-1}{\left(0 - z\right) - x}}{y}\right), \frac{-1}{2}\right)\right) \]
      7. frac-2negN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\left(\frac{\frac{\mathsf{neg}\left(-1\right)}{\mathsf{neg}\left(\left(\left(0 - z\right) - x\right)\right)}}{y}\right), \frac{-1}{2}\right)\right) \]
      8. metadata-evalN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\left(\frac{\frac{1}{\mathsf{neg}\left(\left(\left(0 - z\right) - x\right)\right)}}{y}\right), \frac{-1}{2}\right)\right) \]
      9. /-lowering-/.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\mathsf{/.f64}\left(\left(\frac{1}{\mathsf{neg}\left(\left(\left(0 - z\right) - x\right)\right)}\right), y\right), \frac{-1}{2}\right)\right) \]
      10. associate--l-N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\mathsf{/.f64}\left(\left(\frac{1}{\mathsf{neg}\left(\left(0 - \left(z + x\right)\right)\right)}\right), y\right), \frac{-1}{2}\right)\right) \]
      11. sub0-negN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\mathsf{/.f64}\left(\left(\frac{1}{\mathsf{neg}\left(\left(\mathsf{neg}\left(\left(z + x\right)\right)\right)\right)}\right), y\right), \frac{-1}{2}\right)\right) \]
      12. remove-double-negN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\mathsf{/.f64}\left(\left(\frac{1}{z + x}\right), y\right), \frac{-1}{2}\right)\right) \]
      13. /-lowering-/.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(1, \left(z + x\right)\right), y\right), \frac{-1}{2}\right)\right) \]
      14. +-lowering-+.f6444.9%

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(1, \mathsf{+.f64}\left(z, x\right)\right), y\right), \frac{-1}{2}\right)\right) \]
    11. Applied egg-rr44.9%

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

    if 5.80000000000000028e-271 < y

    1. Initial program 70.0%

      \[2 \cdot \sqrt{\left(x \cdot y + x \cdot z\right) + y \cdot z} \]
    2. Step-by-step derivation
      1. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \color{blue}{\left(\sqrt{\left(x \cdot y + x \cdot z\right) + y \cdot z}\right)}\right) \]
      2. sqrt-lowering-sqrt.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\left(\left(x \cdot y + x \cdot z\right) + y \cdot z\right)\right)\right) \]
      3. associate-+l+N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\left(x \cdot y + \left(x \cdot z + y \cdot z\right)\right)\right)\right) \]
      4. +-lowering-+.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\left(x \cdot y\right), \left(x \cdot z + y \cdot z\right)\right)\right)\right) \]
      5. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \left(x \cdot z + y \cdot z\right)\right)\right)\right) \]
      6. distribute-rgt-outN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \left(z \cdot \left(x + y\right)\right)\right)\right)\right) \]
      7. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \mathsf{*.f64}\left(z, \left(x + y\right)\right)\right)\right)\right) \]
      8. +-lowering-+.f6470.1%

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \mathsf{*.f64}\left(z, \mathsf{+.f64}\left(x, y\right)\right)\right)\right)\right) \]
    3. Simplified70.1%

      \[\leadsto \color{blue}{2 \cdot \sqrt{x \cdot y + z \cdot \left(x + y\right)}} \]
    4. Add Preprocessing
    5. Step-by-step derivation
      1. flip-+N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \left(z \cdot \frac{x \cdot x - y \cdot y}{x - y}\right)\right)\right)\right) \]
      2. clear-numN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \left(z \cdot \frac{1}{\frac{x - y}{x \cdot x - y \cdot y}}\right)\right)\right)\right) \]
      3. un-div-invN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \left(\frac{z}{\frac{x - y}{x \cdot x - y \cdot y}}\right)\right)\right)\right) \]
      4. /-lowering-/.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \mathsf{/.f64}\left(z, \left(\frac{x - y}{x \cdot x - y \cdot y}\right)\right)\right)\right)\right) \]
      5. clear-numN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \mathsf{/.f64}\left(z, \left(\frac{1}{\frac{x \cdot x - y \cdot y}{x - y}}\right)\right)\right)\right)\right) \]
      6. flip-+N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \mathsf{/.f64}\left(z, \left(\frac{1}{x + y}\right)\right)\right)\right)\right) \]
      7. /-lowering-/.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \mathsf{/.f64}\left(z, \mathsf{/.f64}\left(1, \left(x + y\right)\right)\right)\right)\right)\right) \]
      8. +-lowering-+.f6470.2%

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \mathsf{/.f64}\left(z, \mathsf{/.f64}\left(1, \mathsf{+.f64}\left(x, y\right)\right)\right)\right)\right)\right) \]
    6. Applied egg-rr70.2%

      \[\leadsto 2 \cdot \sqrt{x \cdot y + \color{blue}{\frac{z}{\frac{1}{x + y}}}} \]
    7. Taylor expanded in x around 0

      \[\leadsto \color{blue}{2 \cdot \sqrt{y \cdot z}} \]
    8. Step-by-step derivation
      1. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \color{blue}{\left(\sqrt{y \cdot z}\right)}\right) \]
      2. sqrt-lowering-sqrt.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\left(y \cdot z\right)\right)\right) \]
      3. *-commutativeN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\left(z \cdot y\right)\right)\right) \]
      4. *-lowering-*.f6424.4%

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{*.f64}\left(z, y\right)\right)\right) \]
    9. Simplified24.4%

      \[\leadsto \color{blue}{2 \cdot \sqrt{z \cdot y}} \]
    10. Step-by-step derivation
      1. pow1/2N/A

        \[\leadsto 2 \cdot {\left(z \cdot y\right)}^{\color{blue}{\frac{1}{2}}} \]
      2. unpow-prod-downN/A

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

        \[\leadsto 2 \cdot \left({z}^{\left(\frac{1}{4} + \frac{1}{4}\right)} \cdot {y}^{\frac{1}{2}}\right) \]
      4. pow-prod-upN/A

        \[\leadsto 2 \cdot \left(\left({z}^{\frac{1}{4}} \cdot {z}^{\frac{1}{4}}\right) \cdot {\color{blue}{y}}^{\frac{1}{2}}\right) \]
      5. pow-prod-downN/A

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

        \[\leadsto 2 \cdot \left({\left(\left(\mathsf{neg}\left(z\right)\right) \cdot \left(\mathsf{neg}\left(z\right)\right)\right)}^{\frac{1}{4}} \cdot {y}^{\frac{1}{2}}\right) \]
      7. sub0-negN/A

        \[\leadsto 2 \cdot \left({\left(\left(0 - z\right) \cdot \left(\mathsf{neg}\left(z\right)\right)\right)}^{\frac{1}{4}} \cdot {y}^{\frac{1}{2}}\right) \]
      8. sub0-negN/A

        \[\leadsto 2 \cdot \left({\left(\left(0 - z\right) \cdot \left(0 - z\right)\right)}^{\frac{1}{4}} \cdot {y}^{\frac{1}{2}}\right) \]
      9. pow-prod-downN/A

        \[\leadsto 2 \cdot \left(\left({\left(0 - z\right)}^{\frac{1}{4}} \cdot {\left(0 - z\right)}^{\frac{1}{4}}\right) \cdot {\color{blue}{y}}^{\frac{1}{2}}\right) \]
      10. pow-prod-upN/A

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

        \[\leadsto 2 \cdot \left({\left(0 - z\right)}^{\frac{1}{2}} \cdot {y}^{\frac{1}{2}}\right) \]
      12. pow1/2N/A

        \[\leadsto 2 \cdot \left(\sqrt{0 - z} \cdot {\color{blue}{y}}^{\frac{1}{2}}\right) \]
      13. associate-*r*N/A

        \[\leadsto \left(2 \cdot \sqrt{0 - z}\right) \cdot \color{blue}{{y}^{\frac{1}{2}}} \]
      14. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(\left(2 \cdot \sqrt{0 - z}\right), \color{blue}{\left({y}^{\frac{1}{2}}\right)}\right) \]
    11. Applied egg-rr38.5%

      \[\leadsto \color{blue}{\left(2 \cdot \sqrt{z}\right) \cdot \sqrt{y}} \]
  3. Recombined 2 regimes into one program.
  4. Add Preprocessing

Alternative 4: 71.7% accurate, 0.9× speedup?

\[\begin{array}{l} [x, y, z] = \mathsf{sort}([x, y, z])\\ \\ \begin{array}{l} \mathbf{if}\;\left(y \cdot x + z \cdot x\right) + y \cdot z \leq 2 \cdot 10^{+298}:\\ \;\;\;\;2 \cdot \sqrt{y \cdot x + z \cdot \left(y + x\right)}\\ \mathbf{else}:\\ \;\;\;\;2 \cdot \frac{1}{\sqrt{\frac{\frac{-1}{y}}{0 - \left(z + x\right)}}}\\ \end{array} \end{array} \]
NOTE: x, y, and z should be sorted in increasing order before calling this function.
(FPCore (x y z)
 :precision binary64
 (if (<= (+ (+ (* y x) (* z x)) (* y z)) 2e+298)
   (* 2.0 (sqrt (+ (* y x) (* z (+ y x)))))
   (* 2.0 (/ 1.0 (sqrt (/ (/ -1.0 y) (- 0.0 (+ z x))))))))
assert(x < y && y < z);
double code(double x, double y, double z) {
	double tmp;
	if ((((y * x) + (z * x)) + (y * z)) <= 2e+298) {
		tmp = 2.0 * sqrt(((y * x) + (z * (y + x))));
	} else {
		tmp = 2.0 * (1.0 / sqrt(((-1.0 / y) / (0.0 - (z + x)))));
	}
	return tmp;
}
NOTE: x, y, and z should be sorted in increasing order before calling this function.
real(8) function code(x, y, z)
    real(8), intent (in) :: x
    real(8), intent (in) :: y
    real(8), intent (in) :: z
    real(8) :: tmp
    if ((((y * x) + (z * x)) + (y * z)) <= 2d+298) then
        tmp = 2.0d0 * sqrt(((y * x) + (z * (y + x))))
    else
        tmp = 2.0d0 * (1.0d0 / sqrt((((-1.0d0) / y) / (0.0d0 - (z + x)))))
    end if
    code = tmp
end function
assert x < y && y < z;
public static double code(double x, double y, double z) {
	double tmp;
	if ((((y * x) + (z * x)) + (y * z)) <= 2e+298) {
		tmp = 2.0 * Math.sqrt(((y * x) + (z * (y + x))));
	} else {
		tmp = 2.0 * (1.0 / Math.sqrt(((-1.0 / y) / (0.0 - (z + x)))));
	}
	return tmp;
}
[x, y, z] = sort([x, y, z])
def code(x, y, z):
	tmp = 0
	if (((y * x) + (z * x)) + (y * z)) <= 2e+298:
		tmp = 2.0 * math.sqrt(((y * x) + (z * (y + x))))
	else:
		tmp = 2.0 * (1.0 / math.sqrt(((-1.0 / y) / (0.0 - (z + x)))))
	return tmp
x, y, z = sort([x, y, z])
function code(x, y, z)
	tmp = 0.0
	if (Float64(Float64(Float64(y * x) + Float64(z * x)) + Float64(y * z)) <= 2e+298)
		tmp = Float64(2.0 * sqrt(Float64(Float64(y * x) + Float64(z * Float64(y + x)))));
	else
		tmp = Float64(2.0 * Float64(1.0 / sqrt(Float64(Float64(-1.0 / y) / Float64(0.0 - Float64(z + x))))));
	end
	return tmp
end
x, y, z = num2cell(sort([x, y, z])){:}
function tmp_2 = code(x, y, z)
	tmp = 0.0;
	if ((((y * x) + (z * x)) + (y * z)) <= 2e+298)
		tmp = 2.0 * sqrt(((y * x) + (z * (y + x))));
	else
		tmp = 2.0 * (1.0 / sqrt(((-1.0 / y) / (0.0 - (z + x)))));
	end
	tmp_2 = tmp;
end
NOTE: x, y, and z should be sorted in increasing order before calling this function.
code[x_, y_, z_] := If[LessEqual[N[(N[(N[(y * x), $MachinePrecision] + N[(z * x), $MachinePrecision]), $MachinePrecision] + N[(y * z), $MachinePrecision]), $MachinePrecision], 2e+298], N[(2.0 * N[Sqrt[N[(N[(y * x), $MachinePrecision] + N[(z * N[(y + x), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(2.0 * N[(1.0 / N[Sqrt[N[(N[(-1.0 / y), $MachinePrecision] / N[(0.0 - N[(z + x), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
[x, y, z] = \mathsf{sort}([x, y, z])\\
\\
\begin{array}{l}
\mathbf{if}\;\left(y \cdot x + z \cdot x\right) + y \cdot z \leq 2 \cdot 10^{+298}:\\
\;\;\;\;2 \cdot \sqrt{y \cdot x + z \cdot \left(y + x\right)}\\

\mathbf{else}:\\
\;\;\;\;2 \cdot \frac{1}{\sqrt{\frac{\frac{-1}{y}}{0 - \left(z + x\right)}}}\\


\end{array}
\end{array}
Derivation
  1. Split input into 2 regimes
  2. if (+.f64 (+.f64 (*.f64 x y) (*.f64 x z)) (*.f64 y z)) < 1.9999999999999999e298

    1. Initial program 96.5%

      \[2 \cdot \sqrt{\left(x \cdot y + x \cdot z\right) + y \cdot z} \]
    2. Step-by-step derivation
      1. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \color{blue}{\left(\sqrt{\left(x \cdot y + x \cdot z\right) + y \cdot z}\right)}\right) \]
      2. sqrt-lowering-sqrt.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\left(\left(x \cdot y + x \cdot z\right) + y \cdot z\right)\right)\right) \]
      3. associate-+l+N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\left(x \cdot y + \left(x \cdot z + y \cdot z\right)\right)\right)\right) \]
      4. +-lowering-+.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\left(x \cdot y\right), \left(x \cdot z + y \cdot z\right)\right)\right)\right) \]
      5. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \left(x \cdot z + y \cdot z\right)\right)\right)\right) \]
      6. distribute-rgt-outN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \left(z \cdot \left(x + y\right)\right)\right)\right)\right) \]
      7. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \mathsf{*.f64}\left(z, \left(x + y\right)\right)\right)\right)\right) \]
      8. +-lowering-+.f6496.5%

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \mathsf{*.f64}\left(z, \mathsf{+.f64}\left(x, y\right)\right)\right)\right)\right) \]
    3. Simplified96.5%

      \[\leadsto \color{blue}{2 \cdot \sqrt{x \cdot y + z \cdot \left(x + y\right)}} \]
    4. Add Preprocessing

    if 1.9999999999999999e298 < (+.f64 (+.f64 (*.f64 x y) (*.f64 x z)) (*.f64 y z))

    1. Initial program 10.9%

      \[2 \cdot \sqrt{\left(x \cdot y + x \cdot z\right) + y \cdot z} \]
    2. Step-by-step derivation
      1. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \color{blue}{\left(\sqrt{\left(x \cdot y + x \cdot z\right) + y \cdot z}\right)}\right) \]
      2. sqrt-lowering-sqrt.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\left(\left(x \cdot y + x \cdot z\right) + y \cdot z\right)\right)\right) \]
      3. associate-+l+N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\left(x \cdot y + \left(x \cdot z + y \cdot z\right)\right)\right)\right) \]
      4. +-lowering-+.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\left(x \cdot y\right), \left(x \cdot z + y \cdot z\right)\right)\right)\right) \]
      5. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \left(x \cdot z + y \cdot z\right)\right)\right)\right) \]
      6. distribute-rgt-outN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \left(z \cdot \left(x + y\right)\right)\right)\right)\right) \]
      7. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \mathsf{*.f64}\left(z, \left(x + y\right)\right)\right)\right)\right) \]
      8. +-lowering-+.f6411.0%

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \mathsf{*.f64}\left(z, \mathsf{+.f64}\left(x, y\right)\right)\right)\right)\right) \]
    3. Simplified11.0%

      \[\leadsto \color{blue}{2 \cdot \sqrt{x \cdot y + z \cdot \left(x + y\right)}} \]
    4. Add Preprocessing
    5. Step-by-step derivation
      1. distribute-rgt-inN/A

        \[\leadsto \mathsf{*.f64}\left(2, \left(\sqrt{x \cdot y + \left(x \cdot z + y \cdot z\right)}\right)\right) \]
      2. associate-+l+N/A

        \[\leadsto \mathsf{*.f64}\left(2, \left(\sqrt{\left(x \cdot y + x \cdot z\right) + y \cdot z}\right)\right) \]
      3. flip3-+N/A

        \[\leadsto \mathsf{*.f64}\left(2, \left(\sqrt{\frac{{\left(x \cdot y + x \cdot z\right)}^{3} + {\left(y \cdot z\right)}^{3}}{\left(x \cdot y + x \cdot z\right) \cdot \left(x \cdot y + x \cdot z\right) + \left(\left(y \cdot z\right) \cdot \left(y \cdot z\right) - \left(x \cdot y + x \cdot z\right) \cdot \left(y \cdot z\right)\right)}}\right)\right) \]
      4. clear-numN/A

        \[\leadsto \mathsf{*.f64}\left(2, \left(\sqrt{\frac{1}{\frac{\left(x \cdot y + x \cdot z\right) \cdot \left(x \cdot y + x \cdot z\right) + \left(\left(y \cdot z\right) \cdot \left(y \cdot z\right) - \left(x \cdot y + x \cdot z\right) \cdot \left(y \cdot z\right)\right)}{{\left(x \cdot y + x \cdot z\right)}^{3} + {\left(y \cdot z\right)}^{3}}}}\right)\right) \]
      5. sqrt-divN/A

        \[\leadsto \mathsf{*.f64}\left(2, \left(\frac{\sqrt{1}}{\color{blue}{\sqrt{\frac{\left(x \cdot y + x \cdot z\right) \cdot \left(x \cdot y + x \cdot z\right) + \left(\left(y \cdot z\right) \cdot \left(y \cdot z\right) - \left(x \cdot y + x \cdot z\right) \cdot \left(y \cdot z\right)\right)}{{\left(x \cdot y + x \cdot z\right)}^{3} + {\left(y \cdot z\right)}^{3}}}}}\right)\right) \]
      6. metadata-evalN/A

        \[\leadsto \mathsf{*.f64}\left(2, \left(\frac{1}{\sqrt{\color{blue}{\frac{\left(x \cdot y + x \cdot z\right) \cdot \left(x \cdot y + x \cdot z\right) + \left(\left(y \cdot z\right) \cdot \left(y \cdot z\right) - \left(x \cdot y + x \cdot z\right) \cdot \left(y \cdot z\right)\right)}{{\left(x \cdot y + x \cdot z\right)}^{3} + {\left(y \cdot z\right)}^{3}}}}}\right)\right) \]
      7. /-lowering-/.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \color{blue}{\left(\sqrt{\frac{\left(x \cdot y + x \cdot z\right) \cdot \left(x \cdot y + x \cdot z\right) + \left(\left(y \cdot z\right) \cdot \left(y \cdot z\right) - \left(x \cdot y + x \cdot z\right) \cdot \left(y \cdot z\right)\right)}{{\left(x \cdot y + x \cdot z\right)}^{3} + {\left(y \cdot z\right)}^{3}}}\right)}\right)\right) \]
    6. Applied egg-rr11.0%

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

      \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\color{blue}{\left(\frac{-1}{y \cdot \left(-1 \cdot x + -1 \cdot z\right)}\right)}\right)\right)\right) \]
    8. Step-by-step derivation
      1. associate-/r*N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\left(\frac{\frac{-1}{y}}{-1 \cdot x + -1 \cdot z}\right)\right)\right)\right) \]
      2. /-lowering-/.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\left(\frac{-1}{y}\right), \left(-1 \cdot x + -1 \cdot z\right)\right)\right)\right)\right) \]
      3. /-lowering-/.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(-1, y\right), \left(-1 \cdot x + -1 \cdot z\right)\right)\right)\right)\right) \]
      4. +-commutativeN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(-1, y\right), \left(-1 \cdot z + -1 \cdot x\right)\right)\right)\right)\right) \]
      5. mul-1-negN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(-1, y\right), \left(-1 \cdot z + \left(\mathsf{neg}\left(x\right)\right)\right)\right)\right)\right)\right) \]
      6. unsub-negN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(-1, y\right), \left(-1 \cdot z - x\right)\right)\right)\right)\right) \]
      7. --lowering--.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(-1, y\right), \mathsf{\_.f64}\left(\left(-1 \cdot z\right), x\right)\right)\right)\right)\right) \]
      8. mul-1-negN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(-1, y\right), \mathsf{\_.f64}\left(\left(\mathsf{neg}\left(z\right)\right), x\right)\right)\right)\right)\right) \]
      9. neg-sub0N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(-1, y\right), \mathsf{\_.f64}\left(\left(0 - z\right), x\right)\right)\right)\right)\right) \]
      10. --lowering--.f6416.0%

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(-1, y\right), \mathsf{\_.f64}\left(\mathsf{\_.f64}\left(0, z\right), x\right)\right)\right)\right)\right) \]
    9. Simplified16.0%

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

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

Alternative 5: 71.7% accurate, 0.9× speedup?

\[\begin{array}{l} [x, y, z] = \mathsf{sort}([x, y, z])\\ \\ \begin{array}{l} \mathbf{if}\;\left(y \cdot x + z \cdot x\right) + y \cdot z \leq 5 \cdot 10^{+305}:\\ \;\;\;\;2 \cdot \sqrt{y \cdot x + z \cdot \left(y + x\right)}\\ \mathbf{else}:\\ \;\;\;\;2 \cdot {\left(\frac{\frac{1}{z + x}}{y}\right)}^{-0.5}\\ \end{array} \end{array} \]
NOTE: x, y, and z should be sorted in increasing order before calling this function.
(FPCore (x y z)
 :precision binary64
 (if (<= (+ (+ (* y x) (* z x)) (* y z)) 5e+305)
   (* 2.0 (sqrt (+ (* y x) (* z (+ y x)))))
   (* 2.0 (pow (/ (/ 1.0 (+ z x)) y) -0.5))))
assert(x < y && y < z);
double code(double x, double y, double z) {
	double tmp;
	if ((((y * x) + (z * x)) + (y * z)) <= 5e+305) {
		tmp = 2.0 * sqrt(((y * x) + (z * (y + x))));
	} else {
		tmp = 2.0 * pow(((1.0 / (z + x)) / y), -0.5);
	}
	return tmp;
}
NOTE: x, y, and z should be sorted in increasing order before calling this function.
real(8) function code(x, y, z)
    real(8), intent (in) :: x
    real(8), intent (in) :: y
    real(8), intent (in) :: z
    real(8) :: tmp
    if ((((y * x) + (z * x)) + (y * z)) <= 5d+305) then
        tmp = 2.0d0 * sqrt(((y * x) + (z * (y + x))))
    else
        tmp = 2.0d0 * (((1.0d0 / (z + x)) / y) ** (-0.5d0))
    end if
    code = tmp
end function
assert x < y && y < z;
public static double code(double x, double y, double z) {
	double tmp;
	if ((((y * x) + (z * x)) + (y * z)) <= 5e+305) {
		tmp = 2.0 * Math.sqrt(((y * x) + (z * (y + x))));
	} else {
		tmp = 2.0 * Math.pow(((1.0 / (z + x)) / y), -0.5);
	}
	return tmp;
}
[x, y, z] = sort([x, y, z])
def code(x, y, z):
	tmp = 0
	if (((y * x) + (z * x)) + (y * z)) <= 5e+305:
		tmp = 2.0 * math.sqrt(((y * x) + (z * (y + x))))
	else:
		tmp = 2.0 * math.pow(((1.0 / (z + x)) / y), -0.5)
	return tmp
x, y, z = sort([x, y, z])
function code(x, y, z)
	tmp = 0.0
	if (Float64(Float64(Float64(y * x) + Float64(z * x)) + Float64(y * z)) <= 5e+305)
		tmp = Float64(2.0 * sqrt(Float64(Float64(y * x) + Float64(z * Float64(y + x)))));
	else
		tmp = Float64(2.0 * (Float64(Float64(1.0 / Float64(z + x)) / y) ^ -0.5));
	end
	return tmp
end
x, y, z = num2cell(sort([x, y, z])){:}
function tmp_2 = code(x, y, z)
	tmp = 0.0;
	if ((((y * x) + (z * x)) + (y * z)) <= 5e+305)
		tmp = 2.0 * sqrt(((y * x) + (z * (y + x))));
	else
		tmp = 2.0 * (((1.0 / (z + x)) / y) ^ -0.5);
	end
	tmp_2 = tmp;
end
NOTE: x, y, and z should be sorted in increasing order before calling this function.
code[x_, y_, z_] := If[LessEqual[N[(N[(N[(y * x), $MachinePrecision] + N[(z * x), $MachinePrecision]), $MachinePrecision] + N[(y * z), $MachinePrecision]), $MachinePrecision], 5e+305], N[(2.0 * N[Sqrt[N[(N[(y * x), $MachinePrecision] + N[(z * N[(y + x), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(2.0 * N[Power[N[(N[(1.0 / N[(z + x), $MachinePrecision]), $MachinePrecision] / y), $MachinePrecision], -0.5], $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
[x, y, z] = \mathsf{sort}([x, y, z])\\
\\
\begin{array}{l}
\mathbf{if}\;\left(y \cdot x + z \cdot x\right) + y \cdot z \leq 5 \cdot 10^{+305}:\\
\;\;\;\;2 \cdot \sqrt{y \cdot x + z \cdot \left(y + x\right)}\\

\mathbf{else}:\\
\;\;\;\;2 \cdot {\left(\frac{\frac{1}{z + x}}{y}\right)}^{-0.5}\\


\end{array}
\end{array}
Derivation
  1. Split input into 2 regimes
  2. if (+.f64 (+.f64 (*.f64 x y) (*.f64 x z)) (*.f64 y z)) < 5.00000000000000009e305

    1. Initial program 96.6%

      \[2 \cdot \sqrt{\left(x \cdot y + x \cdot z\right) + y \cdot z} \]
    2. Step-by-step derivation
      1. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \color{blue}{\left(\sqrt{\left(x \cdot y + x \cdot z\right) + y \cdot z}\right)}\right) \]
      2. sqrt-lowering-sqrt.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\left(\left(x \cdot y + x \cdot z\right) + y \cdot z\right)\right)\right) \]
      3. associate-+l+N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\left(x \cdot y + \left(x \cdot z + y \cdot z\right)\right)\right)\right) \]
      4. +-lowering-+.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\left(x \cdot y\right), \left(x \cdot z + y \cdot z\right)\right)\right)\right) \]
      5. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \left(x \cdot z + y \cdot z\right)\right)\right)\right) \]
      6. distribute-rgt-outN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \left(z \cdot \left(x + y\right)\right)\right)\right)\right) \]
      7. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \mathsf{*.f64}\left(z, \left(x + y\right)\right)\right)\right)\right) \]
      8. +-lowering-+.f6496.6%

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \mathsf{*.f64}\left(z, \mathsf{+.f64}\left(x, y\right)\right)\right)\right)\right) \]
    3. Simplified96.6%

      \[\leadsto \color{blue}{2 \cdot \sqrt{x \cdot y + z \cdot \left(x + y\right)}} \]
    4. Add Preprocessing

    if 5.00000000000000009e305 < (+.f64 (+.f64 (*.f64 x y) (*.f64 x z)) (*.f64 y z))

    1. Initial program 5.1%

      \[2 \cdot \sqrt{\left(x \cdot y + x \cdot z\right) + y \cdot z} \]
    2. Step-by-step derivation
      1. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \color{blue}{\left(\sqrt{\left(x \cdot y + x \cdot z\right) + y \cdot z}\right)}\right) \]
      2. sqrt-lowering-sqrt.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\left(\left(x \cdot y + x \cdot z\right) + y \cdot z\right)\right)\right) \]
      3. associate-+l+N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\left(x \cdot y + \left(x \cdot z + y \cdot z\right)\right)\right)\right) \]
      4. +-lowering-+.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\left(x \cdot y\right), \left(x \cdot z + y \cdot z\right)\right)\right)\right) \]
      5. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \left(x \cdot z + y \cdot z\right)\right)\right)\right) \]
      6. distribute-rgt-outN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \left(z \cdot \left(x + y\right)\right)\right)\right)\right) \]
      7. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \mathsf{*.f64}\left(z, \left(x + y\right)\right)\right)\right)\right) \]
      8. +-lowering-+.f645.3%

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \mathsf{*.f64}\left(z, \mathsf{+.f64}\left(x, y\right)\right)\right)\right)\right) \]
    3. Simplified5.3%

      \[\leadsto \color{blue}{2 \cdot \sqrt{x \cdot y + z \cdot \left(x + y\right)}} \]
    4. Add Preprocessing
    5. Step-by-step derivation
      1. distribute-rgt-inN/A

        \[\leadsto \mathsf{*.f64}\left(2, \left(\sqrt{x \cdot y + \left(x \cdot z + y \cdot z\right)}\right)\right) \]
      2. associate-+l+N/A

        \[\leadsto \mathsf{*.f64}\left(2, \left(\sqrt{\left(x \cdot y + x \cdot z\right) + y \cdot z}\right)\right) \]
      3. flip3-+N/A

        \[\leadsto \mathsf{*.f64}\left(2, \left(\sqrt{\frac{{\left(x \cdot y + x \cdot z\right)}^{3} + {\left(y \cdot z\right)}^{3}}{\left(x \cdot y + x \cdot z\right) \cdot \left(x \cdot y + x \cdot z\right) + \left(\left(y \cdot z\right) \cdot \left(y \cdot z\right) - \left(x \cdot y + x \cdot z\right) \cdot \left(y \cdot z\right)\right)}}\right)\right) \]
      4. clear-numN/A

        \[\leadsto \mathsf{*.f64}\left(2, \left(\sqrt{\frac{1}{\frac{\left(x \cdot y + x \cdot z\right) \cdot \left(x \cdot y + x \cdot z\right) + \left(\left(y \cdot z\right) \cdot \left(y \cdot z\right) - \left(x \cdot y + x \cdot z\right) \cdot \left(y \cdot z\right)\right)}{{\left(x \cdot y + x \cdot z\right)}^{3} + {\left(y \cdot z\right)}^{3}}}}\right)\right) \]
      5. sqrt-divN/A

        \[\leadsto \mathsf{*.f64}\left(2, \left(\frac{\sqrt{1}}{\color{blue}{\sqrt{\frac{\left(x \cdot y + x \cdot z\right) \cdot \left(x \cdot y + x \cdot z\right) + \left(\left(y \cdot z\right) \cdot \left(y \cdot z\right) - \left(x \cdot y + x \cdot z\right) \cdot \left(y \cdot z\right)\right)}{{\left(x \cdot y + x \cdot z\right)}^{3} + {\left(y \cdot z\right)}^{3}}}}}\right)\right) \]
      6. metadata-evalN/A

        \[\leadsto \mathsf{*.f64}\left(2, \left(\frac{1}{\sqrt{\color{blue}{\frac{\left(x \cdot y + x \cdot z\right) \cdot \left(x \cdot y + x \cdot z\right) + \left(\left(y \cdot z\right) \cdot \left(y \cdot z\right) - \left(x \cdot y + x \cdot z\right) \cdot \left(y \cdot z\right)\right)}{{\left(x \cdot y + x \cdot z\right)}^{3} + {\left(y \cdot z\right)}^{3}}}}}\right)\right) \]
      7. /-lowering-/.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \color{blue}{\left(\sqrt{\frac{\left(x \cdot y + x \cdot z\right) \cdot \left(x \cdot y + x \cdot z\right) + \left(\left(y \cdot z\right) \cdot \left(y \cdot z\right) - \left(x \cdot y + x \cdot z\right) \cdot \left(y \cdot z\right)\right)}{{\left(x \cdot y + x \cdot z\right)}^{3} + {\left(y \cdot z\right)}^{3}}}\right)}\right)\right) \]
    6. Applied egg-rr5.3%

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

      \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\color{blue}{\left(\frac{-1}{y \cdot \left(-1 \cdot x + -1 \cdot z\right)}\right)}\right)\right)\right) \]
    8. Step-by-step derivation
      1. associate-/r*N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\left(\frac{\frac{-1}{y}}{-1 \cdot x + -1 \cdot z}\right)\right)\right)\right) \]
      2. /-lowering-/.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\left(\frac{-1}{y}\right), \left(-1 \cdot x + -1 \cdot z\right)\right)\right)\right)\right) \]
      3. /-lowering-/.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(-1, y\right), \left(-1 \cdot x + -1 \cdot z\right)\right)\right)\right)\right) \]
      4. +-commutativeN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(-1, y\right), \left(-1 \cdot z + -1 \cdot x\right)\right)\right)\right)\right) \]
      5. mul-1-negN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(-1, y\right), \left(-1 \cdot z + \left(\mathsf{neg}\left(x\right)\right)\right)\right)\right)\right)\right) \]
      6. unsub-negN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(-1, y\right), \left(-1 \cdot z - x\right)\right)\right)\right)\right) \]
      7. --lowering--.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(-1, y\right), \mathsf{\_.f64}\left(\left(-1 \cdot z\right), x\right)\right)\right)\right)\right) \]
      8. mul-1-negN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(-1, y\right), \mathsf{\_.f64}\left(\left(\mathsf{neg}\left(z\right)\right), x\right)\right)\right)\right)\right) \]
      9. neg-sub0N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(-1, y\right), \mathsf{\_.f64}\left(\left(0 - z\right), x\right)\right)\right)\right)\right) \]
      10. --lowering--.f6411.9%

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(-1, y\right), \mathsf{\_.f64}\left(\mathsf{\_.f64}\left(0, z\right), x\right)\right)\right)\right)\right) \]
    9. Simplified11.9%

      \[\leadsto 2 \cdot \frac{1}{\sqrt{\color{blue}{\frac{\frac{-1}{y}}{\left(0 - z\right) - x}}}} \]
    10. Step-by-step derivation
      1. pow1/2N/A

        \[\leadsto \mathsf{*.f64}\left(2, \left(\frac{1}{{\left(\frac{\frac{-1}{y}}{\left(0 - z\right) - x}\right)}^{\color{blue}{\frac{1}{2}}}}\right)\right) \]
      2. pow-flipN/A

        \[\leadsto \mathsf{*.f64}\left(2, \left({\left(\frac{\frac{-1}{y}}{\left(0 - z\right) - x}\right)}^{\color{blue}{\left(\mathsf{neg}\left(\frac{1}{2}\right)\right)}}\right)\right) \]
      3. metadata-evalN/A

        \[\leadsto \mathsf{*.f64}\left(2, \left({\left(\frac{\frac{-1}{y}}{\left(0 - z\right) - x}\right)}^{\frac{-1}{2}}\right)\right) \]
      4. pow-lowering-pow.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\left(\frac{\frac{-1}{y}}{\left(0 - z\right) - x}\right), \color{blue}{\frac{-1}{2}}\right)\right) \]
      5. associate-/l/N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\left(\frac{-1}{\left(\left(0 - z\right) - x\right) \cdot y}\right), \frac{-1}{2}\right)\right) \]
      6. associate-/r*N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\left(\frac{\frac{-1}{\left(0 - z\right) - x}}{y}\right), \frac{-1}{2}\right)\right) \]
      7. frac-2negN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\left(\frac{\frac{\mathsf{neg}\left(-1\right)}{\mathsf{neg}\left(\left(\left(0 - z\right) - x\right)\right)}}{y}\right), \frac{-1}{2}\right)\right) \]
      8. metadata-evalN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\left(\frac{\frac{1}{\mathsf{neg}\left(\left(\left(0 - z\right) - x\right)\right)}}{y}\right), \frac{-1}{2}\right)\right) \]
      9. /-lowering-/.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\mathsf{/.f64}\left(\left(\frac{1}{\mathsf{neg}\left(\left(\left(0 - z\right) - x\right)\right)}\right), y\right), \frac{-1}{2}\right)\right) \]
      10. associate--l-N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\mathsf{/.f64}\left(\left(\frac{1}{\mathsf{neg}\left(\left(0 - \left(z + x\right)\right)\right)}\right), y\right), \frac{-1}{2}\right)\right) \]
      11. sub0-negN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\mathsf{/.f64}\left(\left(\frac{1}{\mathsf{neg}\left(\left(\mathsf{neg}\left(\left(z + x\right)\right)\right)\right)}\right), y\right), \frac{-1}{2}\right)\right) \]
      12. remove-double-negN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\mathsf{/.f64}\left(\left(\frac{1}{z + x}\right), y\right), \frac{-1}{2}\right)\right) \]
      13. /-lowering-/.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(1, \left(z + x\right)\right), y\right), \frac{-1}{2}\right)\right) \]
      14. +-lowering-+.f6411.9%

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(1, \mathsf{+.f64}\left(z, x\right)\right), y\right), \frac{-1}{2}\right)\right) \]
    11. Applied egg-rr11.9%

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;\left(y \cdot x + z \cdot x\right) + y \cdot z \leq 5 \cdot 10^{+305}:\\ \;\;\;\;2 \cdot \sqrt{y \cdot x + z \cdot \left(y + x\right)}\\ \mathbf{else}:\\ \;\;\;\;2 \cdot {\left(\frac{\frac{1}{z + x}}{y}\right)}^{-0.5}\\ \end{array} \]
  5. Add Preprocessing

Alternative 6: 70.8% accurate, 1.0× speedup?

\[\begin{array}{l} [x, y, z] = \mathsf{sort}([x, y, z])\\ \\ \begin{array}{l} \mathbf{if}\;y \leq 2.65 \cdot 10^{-298}:\\ \;\;\;\;2 \cdot \sqrt{x \cdot \left(y + z\right)}\\ \mathbf{else}:\\ \;\;\;\;2 \cdot {\left(\frac{\frac{1}{y + x}}{z}\right)}^{-0.5}\\ \end{array} \end{array} \]
NOTE: x, y, and z should be sorted in increasing order before calling this function.
(FPCore (x y z)
 :precision binary64
 (if (<= y 2.65e-298)
   (* 2.0 (sqrt (* x (+ y z))))
   (* 2.0 (pow (/ (/ 1.0 (+ y x)) z) -0.5))))
assert(x < y && y < z);
double code(double x, double y, double z) {
	double tmp;
	if (y <= 2.65e-298) {
		tmp = 2.0 * sqrt((x * (y + z)));
	} else {
		tmp = 2.0 * pow(((1.0 / (y + x)) / z), -0.5);
	}
	return tmp;
}
NOTE: x, y, and z should be sorted in increasing order before calling this function.
real(8) function code(x, y, z)
    real(8), intent (in) :: x
    real(8), intent (in) :: y
    real(8), intent (in) :: z
    real(8) :: tmp
    if (y <= 2.65d-298) then
        tmp = 2.0d0 * sqrt((x * (y + z)))
    else
        tmp = 2.0d0 * (((1.0d0 / (y + x)) / z) ** (-0.5d0))
    end if
    code = tmp
end function
assert x < y && y < z;
public static double code(double x, double y, double z) {
	double tmp;
	if (y <= 2.65e-298) {
		tmp = 2.0 * Math.sqrt((x * (y + z)));
	} else {
		tmp = 2.0 * Math.pow(((1.0 / (y + x)) / z), -0.5);
	}
	return tmp;
}
[x, y, z] = sort([x, y, z])
def code(x, y, z):
	tmp = 0
	if y <= 2.65e-298:
		tmp = 2.0 * math.sqrt((x * (y + z)))
	else:
		tmp = 2.0 * math.pow(((1.0 / (y + x)) / z), -0.5)
	return tmp
x, y, z = sort([x, y, z])
function code(x, y, z)
	tmp = 0.0
	if (y <= 2.65e-298)
		tmp = Float64(2.0 * sqrt(Float64(x * Float64(y + z))));
	else
		tmp = Float64(2.0 * (Float64(Float64(1.0 / Float64(y + x)) / z) ^ -0.5));
	end
	return tmp
end
x, y, z = num2cell(sort([x, y, z])){:}
function tmp_2 = code(x, y, z)
	tmp = 0.0;
	if (y <= 2.65e-298)
		tmp = 2.0 * sqrt((x * (y + z)));
	else
		tmp = 2.0 * (((1.0 / (y + x)) / z) ^ -0.5);
	end
	tmp_2 = tmp;
end
NOTE: x, y, and z should be sorted in increasing order before calling this function.
code[x_, y_, z_] := If[LessEqual[y, 2.65e-298], N[(2.0 * N[Sqrt[N[(x * N[(y + z), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(2.0 * N[Power[N[(N[(1.0 / N[(y + x), $MachinePrecision]), $MachinePrecision] / z), $MachinePrecision], -0.5], $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
[x, y, z] = \mathsf{sort}([x, y, z])\\
\\
\begin{array}{l}
\mathbf{if}\;y \leq 2.65 \cdot 10^{-298}:\\
\;\;\;\;2 \cdot \sqrt{x \cdot \left(y + z\right)}\\

\mathbf{else}:\\
\;\;\;\;2 \cdot {\left(\frac{\frac{1}{y + x}}{z}\right)}^{-0.5}\\


\end{array}
\end{array}
Derivation
  1. Split input into 2 regimes
  2. if y < 2.65000000000000001e-298

    1. Initial program 66.9%

      \[2 \cdot \sqrt{\left(x \cdot y + x \cdot z\right) + y \cdot z} \]
    2. Step-by-step derivation
      1. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \color{blue}{\left(\sqrt{\left(x \cdot y + x \cdot z\right) + y \cdot z}\right)}\right) \]
      2. sqrt-lowering-sqrt.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\left(\left(x \cdot y + x \cdot z\right) + y \cdot z\right)\right)\right) \]
      3. associate-+l+N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\left(x \cdot y + \left(x \cdot z + y \cdot z\right)\right)\right)\right) \]
      4. +-lowering-+.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\left(x \cdot y\right), \left(x \cdot z + y \cdot z\right)\right)\right)\right) \]
      5. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \left(x \cdot z + y \cdot z\right)\right)\right)\right) \]
      6. distribute-rgt-outN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \left(z \cdot \left(x + y\right)\right)\right)\right)\right) \]
      7. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \mathsf{*.f64}\left(z, \left(x + y\right)\right)\right)\right)\right) \]
      8. +-lowering-+.f6466.9%

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \mathsf{*.f64}\left(z, \mathsf{+.f64}\left(x, y\right)\right)\right)\right)\right) \]
    3. Simplified66.9%

      \[\leadsto \color{blue}{2 \cdot \sqrt{x \cdot y + z \cdot \left(x + y\right)}} \]
    4. Add Preprocessing
    5. Taylor expanded in x around inf

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

        \[\leadsto \mathsf{*.f64}\left(2, \color{blue}{\left(\sqrt{x \cdot \left(y + z\right)}\right)}\right) \]
      2. sqrt-lowering-sqrt.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\left(x \cdot \left(y + z\right)\right)\right)\right) \]
      3. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{*.f64}\left(x, \left(y + z\right)\right)\right)\right) \]
      4. +-lowering-+.f6447.7%

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{*.f64}\left(x, \mathsf{+.f64}\left(y, z\right)\right)\right)\right) \]
    7. Simplified47.7%

      \[\leadsto \color{blue}{2 \cdot \sqrt{x \cdot \left(y + z\right)}} \]

    if 2.65000000000000001e-298 < y

    1. Initial program 71.5%

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

      \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\color{blue}{\left(x \cdot z\right)}, \mathsf{*.f64}\left(y, z\right)\right)\right)\right) \]
    4. Step-by-step derivation
      1. *-commutativeN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\left(z \cdot x\right), \mathsf{*.f64}\left(y, z\right)\right)\right)\right) \]
      2. *-lowering-*.f6447.4%

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(z, x\right), \mathsf{*.f64}\left(y, z\right)\right)\right)\right) \]
    5. Simplified47.4%

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

        \[\leadsto \mathsf{*.f64}\left(2, \left(\sqrt{z \cdot x + z \cdot y}\right)\right) \]
      2. distribute-lft-inN/A

        \[\leadsto \mathsf{*.f64}\left(2, \left(\sqrt{z \cdot \left(x + y\right)}\right)\right) \]
      3. *-rgt-identityN/A

        \[\leadsto \mathsf{*.f64}\left(2, \left(\sqrt{\left(z \cdot \left(x + y\right)\right) \cdot 1}\right)\right) \]
      4. *-inversesN/A

        \[\leadsto \mathsf{*.f64}\left(2, \left(\sqrt{\left(z \cdot \left(x + y\right)\right) \cdot \frac{x - y}{x - y}}\right)\right) \]
      5. associate-/l*N/A

        \[\leadsto \mathsf{*.f64}\left(2, \left(\sqrt{\frac{\left(z \cdot \left(x + y\right)\right) \cdot \left(x - y\right)}{x - y}}\right)\right) \]
      6. clear-numN/A

        \[\leadsto \mathsf{*.f64}\left(2, \left(\sqrt{\frac{1}{\frac{x - y}{\left(z \cdot \left(x + y\right)\right) \cdot \left(x - y\right)}}}\right)\right) \]
      7. inv-powN/A

        \[\leadsto \mathsf{*.f64}\left(2, \left(\sqrt{{\left(\frac{x - y}{\left(z \cdot \left(x + y\right)\right) \cdot \left(x - y\right)}\right)}^{-1}}\right)\right) \]
      8. sqrt-pow1N/A

        \[\leadsto \mathsf{*.f64}\left(2, \left({\left(\frac{x - y}{\left(z \cdot \left(x + y\right)\right) \cdot \left(x - y\right)}\right)}^{\color{blue}{\left(\frac{-1}{2}\right)}}\right)\right) \]
      9. pow-lowering-pow.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\left(\frac{x - y}{\left(z \cdot \left(x + y\right)\right) \cdot \left(x - y\right)}\right), \color{blue}{\left(\frac{-1}{2}\right)}\right)\right) \]
      10. *-commutativeN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\left(\frac{x - y}{\left(x - y\right) \cdot \left(z \cdot \left(x + y\right)\right)}\right), \left(\frac{-1}{2}\right)\right)\right) \]
      11. associate-/r*N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\left(\frac{\frac{x - y}{x - y}}{z \cdot \left(x + y\right)}\right), \left(\frac{\color{blue}{-1}}{2}\right)\right)\right) \]
      12. *-inversesN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\left(\frac{1}{z \cdot \left(x + y\right)}\right), \left(\frac{-1}{2}\right)\right)\right) \]
      13. /-lowering-/.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\mathsf{/.f64}\left(1, \left(z \cdot \left(x + y\right)\right)\right), \left(\frac{\color{blue}{-1}}{2}\right)\right)\right) \]
      14. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\mathsf{/.f64}\left(1, \mathsf{*.f64}\left(z, \left(x + y\right)\right)\right), \left(\frac{-1}{2}\right)\right)\right) \]
      15. +-lowering-+.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\mathsf{/.f64}\left(1, \mathsf{*.f64}\left(z, \mathsf{+.f64}\left(x, y\right)\right)\right), \left(\frac{-1}{2}\right)\right)\right) \]
      16. metadata-eval47.6%

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\mathsf{/.f64}\left(1, \mathsf{*.f64}\left(z, \mathsf{+.f64}\left(x, y\right)\right)\right), \frac{-1}{2}\right)\right) \]
    7. Applied egg-rr47.6%

      \[\leadsto 2 \cdot \color{blue}{{\left(\frac{1}{z \cdot \left(x + y\right)}\right)}^{-0.5}} \]
    8. Step-by-step derivation
      1. *-commutativeN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\left(\frac{1}{\left(x + y\right) \cdot z}\right), \frac{-1}{2}\right)\right) \]
      2. associate-/r*N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\left(\frac{\frac{1}{x + y}}{z}\right), \frac{-1}{2}\right)\right) \]
      3. /-lowering-/.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\mathsf{/.f64}\left(\left(\frac{1}{x + y}\right), z\right), \frac{-1}{2}\right)\right) \]
      4. /-lowering-/.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(1, \left(x + y\right)\right), z\right), \frac{-1}{2}\right)\right) \]
      5. +-lowering-+.f6449.4%

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(1, \mathsf{+.f64}\left(x, y\right)\right), z\right), \frac{-1}{2}\right)\right) \]
    9. Applied egg-rr49.4%

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;y \leq 2.65 \cdot 10^{-298}:\\ \;\;\;\;2 \cdot \sqrt{x \cdot \left(y + z\right)}\\ \mathbf{else}:\\ \;\;\;\;2 \cdot {\left(\frac{\frac{1}{y + x}}{z}\right)}^{-0.5}\\ \end{array} \]
  5. Add Preprocessing

Alternative 7: 70.2% accurate, 1.0× speedup?

\[\begin{array}{l} [x, y, z] = \mathsf{sort}([x, y, z])\\ \\ \begin{array}{l} \mathbf{if}\;y \leq -2 \cdot 10^{-278}:\\ \;\;\;\;2 \cdot \sqrt{x \cdot \left(y + z\right)}\\ \mathbf{else}:\\ \;\;\;\;2 \cdot \sqrt{z \cdot \left(y + x\right)}\\ \end{array} \end{array} \]
NOTE: x, y, and z should be sorted in increasing order before calling this function.
(FPCore (x y z)
 :precision binary64
 (if (<= y -2e-278) (* 2.0 (sqrt (* x (+ y z)))) (* 2.0 (sqrt (* z (+ y x))))))
assert(x < y && y < z);
double code(double x, double y, double z) {
	double tmp;
	if (y <= -2e-278) {
		tmp = 2.0 * sqrt((x * (y + z)));
	} else {
		tmp = 2.0 * sqrt((z * (y + x)));
	}
	return tmp;
}
NOTE: x, y, and z should be sorted in increasing order before calling this function.
real(8) function code(x, y, z)
    real(8), intent (in) :: x
    real(8), intent (in) :: y
    real(8), intent (in) :: z
    real(8) :: tmp
    if (y <= (-2d-278)) then
        tmp = 2.0d0 * sqrt((x * (y + z)))
    else
        tmp = 2.0d0 * sqrt((z * (y + x)))
    end if
    code = tmp
end function
assert x < y && y < z;
public static double code(double x, double y, double z) {
	double tmp;
	if (y <= -2e-278) {
		tmp = 2.0 * Math.sqrt((x * (y + z)));
	} else {
		tmp = 2.0 * Math.sqrt((z * (y + x)));
	}
	return tmp;
}
[x, y, z] = sort([x, y, z])
def code(x, y, z):
	tmp = 0
	if y <= -2e-278:
		tmp = 2.0 * math.sqrt((x * (y + z)))
	else:
		tmp = 2.0 * math.sqrt((z * (y + x)))
	return tmp
x, y, z = sort([x, y, z])
function code(x, y, z)
	tmp = 0.0
	if (y <= -2e-278)
		tmp = Float64(2.0 * sqrt(Float64(x * Float64(y + z))));
	else
		tmp = Float64(2.0 * sqrt(Float64(z * Float64(y + x))));
	end
	return tmp
end
x, y, z = num2cell(sort([x, y, z])){:}
function tmp_2 = code(x, y, z)
	tmp = 0.0;
	if (y <= -2e-278)
		tmp = 2.0 * sqrt((x * (y + z)));
	else
		tmp = 2.0 * sqrt((z * (y + x)));
	end
	tmp_2 = tmp;
end
NOTE: x, y, and z should be sorted in increasing order before calling this function.
code[x_, y_, z_] := If[LessEqual[y, -2e-278], N[(2.0 * N[Sqrt[N[(x * N[(y + z), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(2.0 * N[Sqrt[N[(z * N[(y + x), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
[x, y, z] = \mathsf{sort}([x, y, z])\\
\\
\begin{array}{l}
\mathbf{if}\;y \leq -2 \cdot 10^{-278}:\\
\;\;\;\;2 \cdot \sqrt{x \cdot \left(y + z\right)}\\

\mathbf{else}:\\
\;\;\;\;2 \cdot \sqrt{z \cdot \left(y + x\right)}\\


\end{array}
\end{array}
Derivation
  1. Split input into 2 regimes
  2. if y < -1.99999999999999988e-278

    1. Initial program 65.7%

      \[2 \cdot \sqrt{\left(x \cdot y + x \cdot z\right) + y \cdot z} \]
    2. Step-by-step derivation
      1. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \color{blue}{\left(\sqrt{\left(x \cdot y + x \cdot z\right) + y \cdot z}\right)}\right) \]
      2. sqrt-lowering-sqrt.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\left(\left(x \cdot y + x \cdot z\right) + y \cdot z\right)\right)\right) \]
      3. associate-+l+N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\left(x \cdot y + \left(x \cdot z + y \cdot z\right)\right)\right)\right) \]
      4. +-lowering-+.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\left(x \cdot y\right), \left(x \cdot z + y \cdot z\right)\right)\right)\right) \]
      5. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \left(x \cdot z + y \cdot z\right)\right)\right)\right) \]
      6. distribute-rgt-outN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \left(z \cdot \left(x + y\right)\right)\right)\right)\right) \]
      7. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \mathsf{*.f64}\left(z, \left(x + y\right)\right)\right)\right)\right) \]
      8. +-lowering-+.f6465.7%

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \mathsf{*.f64}\left(z, \mathsf{+.f64}\left(x, y\right)\right)\right)\right)\right) \]
    3. Simplified65.7%

      \[\leadsto \color{blue}{2 \cdot \sqrt{x \cdot y + z \cdot \left(x + y\right)}} \]
    4. Add Preprocessing
    5. Taylor expanded in x around inf

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

        \[\leadsto \mathsf{*.f64}\left(2, \color{blue}{\left(\sqrt{x \cdot \left(y + z\right)}\right)}\right) \]
      2. sqrt-lowering-sqrt.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\left(x \cdot \left(y + z\right)\right)\right)\right) \]
      3. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{*.f64}\left(x, \left(y + z\right)\right)\right)\right) \]
      4. +-lowering-+.f6445.0%

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{*.f64}\left(x, \mathsf{+.f64}\left(y, z\right)\right)\right)\right) \]
    7. Simplified45.0%

      \[\leadsto \color{blue}{2 \cdot \sqrt{x \cdot \left(y + z\right)}} \]

    if -1.99999999999999988e-278 < y

    1. Initial program 72.2%

      \[2 \cdot \sqrt{\left(x \cdot y + x \cdot z\right) + y \cdot z} \]
    2. Step-by-step derivation
      1. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \color{blue}{\left(\sqrt{\left(x \cdot y + x \cdot z\right) + y \cdot z}\right)}\right) \]
      2. sqrt-lowering-sqrt.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\left(\left(x \cdot y + x \cdot z\right) + y \cdot z\right)\right)\right) \]
      3. associate-+l+N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\left(x \cdot y + \left(x \cdot z + y \cdot z\right)\right)\right)\right) \]
      4. +-lowering-+.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\left(x \cdot y\right), \left(x \cdot z + y \cdot z\right)\right)\right)\right) \]
      5. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \left(x \cdot z + y \cdot z\right)\right)\right)\right) \]
      6. distribute-rgt-outN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \left(z \cdot \left(x + y\right)\right)\right)\right)\right) \]
      7. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \mathsf{*.f64}\left(z, \left(x + y\right)\right)\right)\right)\right) \]
      8. +-lowering-+.f6472.3%

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \mathsf{*.f64}\left(z, \mathsf{+.f64}\left(x, y\right)\right)\right)\right)\right) \]
    3. Simplified72.3%

      \[\leadsto \color{blue}{2 \cdot \sqrt{x \cdot y + z \cdot \left(x + y\right)}} \]
    4. Add Preprocessing
    5. Taylor expanded in z around inf

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

        \[\leadsto \mathsf{*.f64}\left(2, \color{blue}{\left(\sqrt{z \cdot \left(x + y\right)}\right)}\right) \]
      2. sqrt-lowering-sqrt.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\left(z \cdot \left(x + y\right)\right)\right)\right) \]
      3. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{*.f64}\left(z, \left(x + y\right)\right)\right)\right) \]
      4. +-commutativeN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{*.f64}\left(z, \left(y + x\right)\right)\right)\right) \]
      5. +-lowering-+.f6450.1%

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{*.f64}\left(z, \mathsf{+.f64}\left(y, x\right)\right)\right)\right) \]
    7. Simplified50.1%

      \[\leadsto \color{blue}{2 \cdot \sqrt{z \cdot \left(y + x\right)}} \]
  3. Recombined 2 regimes into one program.
  4. Add Preprocessing

Alternative 8: 69.3% accurate, 1.0× speedup?

\[\begin{array}{l} [x, y, z] = \mathsf{sort}([x, y, z])\\ \\ \begin{array}{l} \mathbf{if}\;y \leq 2.8 \cdot 10^{-296}:\\ \;\;\;\;2 \cdot \sqrt{x \cdot \left(y + z\right)}\\ \mathbf{else}:\\ \;\;\;\;2 \cdot \sqrt{y \cdot z}\\ \end{array} \end{array} \]
NOTE: x, y, and z should be sorted in increasing order before calling this function.
(FPCore (x y z)
 :precision binary64
 (if (<= y 2.8e-296) (* 2.0 (sqrt (* x (+ y z)))) (* 2.0 (sqrt (* y z)))))
assert(x < y && y < z);
double code(double x, double y, double z) {
	double tmp;
	if (y <= 2.8e-296) {
		tmp = 2.0 * sqrt((x * (y + z)));
	} else {
		tmp = 2.0 * sqrt((y * z));
	}
	return tmp;
}
NOTE: x, y, and z should be sorted in increasing order before calling this function.
real(8) function code(x, y, z)
    real(8), intent (in) :: x
    real(8), intent (in) :: y
    real(8), intent (in) :: z
    real(8) :: tmp
    if (y <= 2.8d-296) then
        tmp = 2.0d0 * sqrt((x * (y + z)))
    else
        tmp = 2.0d0 * sqrt((y * z))
    end if
    code = tmp
end function
assert x < y && y < z;
public static double code(double x, double y, double z) {
	double tmp;
	if (y <= 2.8e-296) {
		tmp = 2.0 * Math.sqrt((x * (y + z)));
	} else {
		tmp = 2.0 * Math.sqrt((y * z));
	}
	return tmp;
}
[x, y, z] = sort([x, y, z])
def code(x, y, z):
	tmp = 0
	if y <= 2.8e-296:
		tmp = 2.0 * math.sqrt((x * (y + z)))
	else:
		tmp = 2.0 * math.sqrt((y * z))
	return tmp
x, y, z = sort([x, y, z])
function code(x, y, z)
	tmp = 0.0
	if (y <= 2.8e-296)
		tmp = Float64(2.0 * sqrt(Float64(x * Float64(y + z))));
	else
		tmp = Float64(2.0 * sqrt(Float64(y * z)));
	end
	return tmp
end
x, y, z = num2cell(sort([x, y, z])){:}
function tmp_2 = code(x, y, z)
	tmp = 0.0;
	if (y <= 2.8e-296)
		tmp = 2.0 * sqrt((x * (y + z)));
	else
		tmp = 2.0 * sqrt((y * z));
	end
	tmp_2 = tmp;
end
NOTE: x, y, and z should be sorted in increasing order before calling this function.
code[x_, y_, z_] := If[LessEqual[y, 2.8e-296], N[(2.0 * N[Sqrt[N[(x * N[(y + z), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(2.0 * N[Sqrt[N[(y * z), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
[x, y, z] = \mathsf{sort}([x, y, z])\\
\\
\begin{array}{l}
\mathbf{if}\;y \leq 2.8 \cdot 10^{-296}:\\
\;\;\;\;2 \cdot \sqrt{x \cdot \left(y + z\right)}\\

\mathbf{else}:\\
\;\;\;\;2 \cdot \sqrt{y \cdot z}\\


\end{array}
\end{array}
Derivation
  1. Split input into 2 regimes
  2. if y < 2.7999999999999999e-296

    1. Initial program 67.6%

      \[2 \cdot \sqrt{\left(x \cdot y + x \cdot z\right) + y \cdot z} \]
    2. Step-by-step derivation
      1. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \color{blue}{\left(\sqrt{\left(x \cdot y + x \cdot z\right) + y \cdot z}\right)}\right) \]
      2. sqrt-lowering-sqrt.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\left(\left(x \cdot y + x \cdot z\right) + y \cdot z\right)\right)\right) \]
      3. associate-+l+N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\left(x \cdot y + \left(x \cdot z + y \cdot z\right)\right)\right)\right) \]
      4. +-lowering-+.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\left(x \cdot y\right), \left(x \cdot z + y \cdot z\right)\right)\right)\right) \]
      5. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \left(x \cdot z + y \cdot z\right)\right)\right)\right) \]
      6. distribute-rgt-outN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \left(z \cdot \left(x + y\right)\right)\right)\right)\right) \]
      7. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \mathsf{*.f64}\left(z, \left(x + y\right)\right)\right)\right)\right) \]
      8. +-lowering-+.f6467.6%

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \mathsf{*.f64}\left(z, \mathsf{+.f64}\left(x, y\right)\right)\right)\right)\right) \]
    3. Simplified67.6%

      \[\leadsto \color{blue}{2 \cdot \sqrt{x \cdot y + z \cdot \left(x + y\right)}} \]
    4. Add Preprocessing
    5. Taylor expanded in x around inf

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

        \[\leadsto \mathsf{*.f64}\left(2, \color{blue}{\left(\sqrt{x \cdot \left(y + z\right)}\right)}\right) \]
      2. sqrt-lowering-sqrt.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\left(x \cdot \left(y + z\right)\right)\right)\right) \]
      3. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{*.f64}\left(x, \left(y + z\right)\right)\right)\right) \]
      4. +-lowering-+.f6448.9%

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{*.f64}\left(x, \mathsf{+.f64}\left(y, z\right)\right)\right)\right) \]
    7. Simplified48.9%

      \[\leadsto \color{blue}{2 \cdot \sqrt{x \cdot \left(y + z\right)}} \]

    if 2.7999999999999999e-296 < y

    1. Initial program 70.8%

      \[2 \cdot \sqrt{\left(x \cdot y + x \cdot z\right) + y \cdot z} \]
    2. Step-by-step derivation
      1. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \color{blue}{\left(\sqrt{\left(x \cdot y + x \cdot z\right) + y \cdot z}\right)}\right) \]
      2. sqrt-lowering-sqrt.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\left(\left(x \cdot y + x \cdot z\right) + y \cdot z\right)\right)\right) \]
      3. associate-+l+N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\left(x \cdot y + \left(x \cdot z + y \cdot z\right)\right)\right)\right) \]
      4. +-lowering-+.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\left(x \cdot y\right), \left(x \cdot z + y \cdot z\right)\right)\right)\right) \]
      5. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \left(x \cdot z + y \cdot z\right)\right)\right)\right) \]
      6. distribute-rgt-outN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \left(z \cdot \left(x + y\right)\right)\right)\right)\right) \]
      7. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \mathsf{*.f64}\left(z, \left(x + y\right)\right)\right)\right)\right) \]
      8. +-lowering-+.f6470.9%

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \mathsf{*.f64}\left(z, \mathsf{+.f64}\left(x, y\right)\right)\right)\right)\right) \]
    3. Simplified70.9%

      \[\leadsto \color{blue}{2 \cdot \sqrt{x \cdot y + z \cdot \left(x + y\right)}} \]
    4. Add Preprocessing
    5. Taylor expanded in x around 0

      \[\leadsto \color{blue}{2 \cdot \sqrt{y \cdot z}} \]
    6. Step-by-step derivation
      1. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \color{blue}{\left(\sqrt{y \cdot z}\right)}\right) \]
      2. sqrt-lowering-sqrt.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\left(y \cdot z\right)\right)\right) \]
      3. *-lowering-*.f6423.9%

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{*.f64}\left(y, z\right)\right)\right) \]
    7. Simplified23.9%

      \[\leadsto \color{blue}{2 \cdot \sqrt{y \cdot z}} \]
  3. Recombined 2 regimes into one program.
  4. Add Preprocessing

Alternative 9: 68.1% accurate, 1.0× speedup?

\[\begin{array}{l} [x, y, z] = \mathsf{sort}([x, y, z])\\ \\ \begin{array}{l} \mathbf{if}\;y \leq -5 \cdot 10^{-310}:\\ \;\;\;\;2 \cdot \sqrt{y \cdot x}\\ \mathbf{else}:\\ \;\;\;\;2 \cdot \sqrt{y \cdot z}\\ \end{array} \end{array} \]
NOTE: x, y, and z should be sorted in increasing order before calling this function.
(FPCore (x y z)
 :precision binary64
 (if (<= y -5e-310) (* 2.0 (sqrt (* y x))) (* 2.0 (sqrt (* y z)))))
assert(x < y && y < z);
double code(double x, double y, double z) {
	double tmp;
	if (y <= -5e-310) {
		tmp = 2.0 * sqrt((y * x));
	} else {
		tmp = 2.0 * sqrt((y * z));
	}
	return tmp;
}
NOTE: x, y, and z should be sorted in increasing order before calling this function.
real(8) function code(x, y, z)
    real(8), intent (in) :: x
    real(8), intent (in) :: y
    real(8), intent (in) :: z
    real(8) :: tmp
    if (y <= (-5d-310)) then
        tmp = 2.0d0 * sqrt((y * x))
    else
        tmp = 2.0d0 * sqrt((y * z))
    end if
    code = tmp
end function
assert x < y && y < z;
public static double code(double x, double y, double z) {
	double tmp;
	if (y <= -5e-310) {
		tmp = 2.0 * Math.sqrt((y * x));
	} else {
		tmp = 2.0 * Math.sqrt((y * z));
	}
	return tmp;
}
[x, y, z] = sort([x, y, z])
def code(x, y, z):
	tmp = 0
	if y <= -5e-310:
		tmp = 2.0 * math.sqrt((y * x))
	else:
		tmp = 2.0 * math.sqrt((y * z))
	return tmp
x, y, z = sort([x, y, z])
function code(x, y, z)
	tmp = 0.0
	if (y <= -5e-310)
		tmp = Float64(2.0 * sqrt(Float64(y * x)));
	else
		tmp = Float64(2.0 * sqrt(Float64(y * z)));
	end
	return tmp
end
x, y, z = num2cell(sort([x, y, z])){:}
function tmp_2 = code(x, y, z)
	tmp = 0.0;
	if (y <= -5e-310)
		tmp = 2.0 * sqrt((y * x));
	else
		tmp = 2.0 * sqrt((y * z));
	end
	tmp_2 = tmp;
end
NOTE: x, y, and z should be sorted in increasing order before calling this function.
code[x_, y_, z_] := If[LessEqual[y, -5e-310], N[(2.0 * N[Sqrt[N[(y * x), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(2.0 * N[Sqrt[N[(y * z), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
[x, y, z] = \mathsf{sort}([x, y, z])\\
\\
\begin{array}{l}
\mathbf{if}\;y \leq -5 \cdot 10^{-310}:\\
\;\;\;\;2 \cdot \sqrt{y \cdot x}\\

\mathbf{else}:\\
\;\;\;\;2 \cdot \sqrt{y \cdot z}\\


\end{array}
\end{array}
Derivation
  1. Split input into 2 regimes
  2. if y < -4.999999999999985e-310

    1. Initial program 66.6%

      \[2 \cdot \sqrt{\left(x \cdot y + x \cdot z\right) + y \cdot z} \]
    2. Step-by-step derivation
      1. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \color{blue}{\left(\sqrt{\left(x \cdot y + x \cdot z\right) + y \cdot z}\right)}\right) \]
      2. sqrt-lowering-sqrt.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\left(\left(x \cdot y + x \cdot z\right) + y \cdot z\right)\right)\right) \]
      3. associate-+l+N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\left(x \cdot y + \left(x \cdot z + y \cdot z\right)\right)\right)\right) \]
      4. +-lowering-+.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\left(x \cdot y\right), \left(x \cdot z + y \cdot z\right)\right)\right)\right) \]
      5. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \left(x \cdot z + y \cdot z\right)\right)\right)\right) \]
      6. distribute-rgt-outN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \left(z \cdot \left(x + y\right)\right)\right)\right)\right) \]
      7. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \mathsf{*.f64}\left(z, \left(x + y\right)\right)\right)\right)\right) \]
      8. +-lowering-+.f6466.6%

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \mathsf{*.f64}\left(z, \mathsf{+.f64}\left(x, y\right)\right)\right)\right)\right) \]
    3. Simplified66.6%

      \[\leadsto \color{blue}{2 \cdot \sqrt{x \cdot y + z \cdot \left(x + y\right)}} \]
    4. Add Preprocessing
    5. Taylor expanded in z around 0

      \[\leadsto \color{blue}{2 \cdot \sqrt{x \cdot y}} \]
    6. Step-by-step derivation
      1. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \color{blue}{\left(\sqrt{x \cdot y}\right)}\right) \]
      2. sqrt-lowering-sqrt.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\left(x \cdot y\right)\right)\right) \]
      3. *-commutativeN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\left(y \cdot x\right)\right)\right) \]
      4. *-lowering-*.f6426.4%

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{*.f64}\left(y, x\right)\right)\right) \]
    7. Simplified26.4%

      \[\leadsto \color{blue}{2 \cdot \sqrt{y \cdot x}} \]

    if -4.999999999999985e-310 < y

    1. Initial program 71.7%

      \[2 \cdot \sqrt{\left(x \cdot y + x \cdot z\right) + y \cdot z} \]
    2. Step-by-step derivation
      1. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \color{blue}{\left(\sqrt{\left(x \cdot y + x \cdot z\right) + y \cdot z}\right)}\right) \]
      2. sqrt-lowering-sqrt.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\left(\left(x \cdot y + x \cdot z\right) + y \cdot z\right)\right)\right) \]
      3. associate-+l+N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\left(x \cdot y + \left(x \cdot z + y \cdot z\right)\right)\right)\right) \]
      4. +-lowering-+.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\left(x \cdot y\right), \left(x \cdot z + y \cdot z\right)\right)\right)\right) \]
      5. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \left(x \cdot z + y \cdot z\right)\right)\right)\right) \]
      6. distribute-rgt-outN/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \left(z \cdot \left(x + y\right)\right)\right)\right)\right) \]
      7. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \mathsf{*.f64}\left(z, \left(x + y\right)\right)\right)\right)\right) \]
      8. +-lowering-+.f6471.8%

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \mathsf{*.f64}\left(z, \mathsf{+.f64}\left(x, y\right)\right)\right)\right)\right) \]
    3. Simplified71.8%

      \[\leadsto \color{blue}{2 \cdot \sqrt{x \cdot y + z \cdot \left(x + y\right)}} \]
    4. Add Preprocessing
    5. Taylor expanded in x around 0

      \[\leadsto \color{blue}{2 \cdot \sqrt{y \cdot z}} \]
    6. Step-by-step derivation
      1. *-lowering-*.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \color{blue}{\left(\sqrt{y \cdot z}\right)}\right) \]
      2. sqrt-lowering-sqrt.f64N/A

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\left(y \cdot z\right)\right)\right) \]
      3. *-lowering-*.f6423.2%

        \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{*.f64}\left(y, z\right)\right)\right) \]
    7. Simplified23.2%

      \[\leadsto \color{blue}{2 \cdot \sqrt{y \cdot z}} \]
  3. Recombined 2 regimes into one program.
  4. Add Preprocessing

Alternative 10: 69.2% accurate, 1.0× speedup?

\[\begin{array}{l} [x, y, z] = \mathsf{sort}([x, y, z])\\ \\ 2 \cdot {\left(\frac{\frac{1}{z + x}}{y}\right)}^{-0.5} \end{array} \]
NOTE: x, y, and z should be sorted in increasing order before calling this function.
(FPCore (x y z) :precision binary64 (* 2.0 (pow (/ (/ 1.0 (+ z x)) y) -0.5)))
assert(x < y && y < z);
double code(double x, double y, double z) {
	return 2.0 * pow(((1.0 / (z + x)) / y), -0.5);
}
NOTE: x, y, and z should be sorted in increasing order before calling this function.
real(8) function code(x, y, z)
    real(8), intent (in) :: x
    real(8), intent (in) :: y
    real(8), intent (in) :: z
    code = 2.0d0 * (((1.0d0 / (z + x)) / y) ** (-0.5d0))
end function
assert x < y && y < z;
public static double code(double x, double y, double z) {
	return 2.0 * Math.pow(((1.0 / (z + x)) / y), -0.5);
}
[x, y, z] = sort([x, y, z])
def code(x, y, z):
	return 2.0 * math.pow(((1.0 / (z + x)) / y), -0.5)
x, y, z = sort([x, y, z])
function code(x, y, z)
	return Float64(2.0 * (Float64(Float64(1.0 / Float64(z + x)) / y) ^ -0.5))
end
x, y, z = num2cell(sort([x, y, z])){:}
function tmp = code(x, y, z)
	tmp = 2.0 * (((1.0 / (z + x)) / y) ^ -0.5);
end
NOTE: x, y, and z should be sorted in increasing order before calling this function.
code[x_, y_, z_] := N[(2.0 * N[Power[N[(N[(1.0 / N[(z + x), $MachinePrecision]), $MachinePrecision] / y), $MachinePrecision], -0.5], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
[x, y, z] = \mathsf{sort}([x, y, z])\\
\\
2 \cdot {\left(\frac{\frac{1}{z + x}}{y}\right)}^{-0.5}
\end{array}
Derivation
  1. Initial program 69.1%

    \[2 \cdot \sqrt{\left(x \cdot y + x \cdot z\right) + y \cdot z} \]
  2. Step-by-step derivation
    1. *-lowering-*.f64N/A

      \[\leadsto \mathsf{*.f64}\left(2, \color{blue}{\left(\sqrt{\left(x \cdot y + x \cdot z\right) + y \cdot z}\right)}\right) \]
    2. sqrt-lowering-sqrt.f64N/A

      \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\left(\left(x \cdot y + x \cdot z\right) + y \cdot z\right)\right)\right) \]
    3. associate-+l+N/A

      \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\left(x \cdot y + \left(x \cdot z + y \cdot z\right)\right)\right)\right) \]
    4. +-lowering-+.f64N/A

      \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\left(x \cdot y\right), \left(x \cdot z + y \cdot z\right)\right)\right)\right) \]
    5. *-lowering-*.f64N/A

      \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \left(x \cdot z + y \cdot z\right)\right)\right)\right) \]
    6. distribute-rgt-outN/A

      \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \left(z \cdot \left(x + y\right)\right)\right)\right)\right) \]
    7. *-lowering-*.f64N/A

      \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \mathsf{*.f64}\left(z, \left(x + y\right)\right)\right)\right)\right) \]
    8. +-lowering-+.f6469.2%

      \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \mathsf{*.f64}\left(z, \mathsf{+.f64}\left(x, y\right)\right)\right)\right)\right) \]
  3. Simplified69.2%

    \[\leadsto \color{blue}{2 \cdot \sqrt{x \cdot y + z \cdot \left(x + y\right)}} \]
  4. Add Preprocessing
  5. Step-by-step derivation
    1. distribute-rgt-inN/A

      \[\leadsto \mathsf{*.f64}\left(2, \left(\sqrt{x \cdot y + \left(x \cdot z + y \cdot z\right)}\right)\right) \]
    2. associate-+l+N/A

      \[\leadsto \mathsf{*.f64}\left(2, \left(\sqrt{\left(x \cdot y + x \cdot z\right) + y \cdot z}\right)\right) \]
    3. flip3-+N/A

      \[\leadsto \mathsf{*.f64}\left(2, \left(\sqrt{\frac{{\left(x \cdot y + x \cdot z\right)}^{3} + {\left(y \cdot z\right)}^{3}}{\left(x \cdot y + x \cdot z\right) \cdot \left(x \cdot y + x \cdot z\right) + \left(\left(y \cdot z\right) \cdot \left(y \cdot z\right) - \left(x \cdot y + x \cdot z\right) \cdot \left(y \cdot z\right)\right)}}\right)\right) \]
    4. clear-numN/A

      \[\leadsto \mathsf{*.f64}\left(2, \left(\sqrt{\frac{1}{\frac{\left(x \cdot y + x \cdot z\right) \cdot \left(x \cdot y + x \cdot z\right) + \left(\left(y \cdot z\right) \cdot \left(y \cdot z\right) - \left(x \cdot y + x \cdot z\right) \cdot \left(y \cdot z\right)\right)}{{\left(x \cdot y + x \cdot z\right)}^{3} + {\left(y \cdot z\right)}^{3}}}}\right)\right) \]
    5. sqrt-divN/A

      \[\leadsto \mathsf{*.f64}\left(2, \left(\frac{\sqrt{1}}{\color{blue}{\sqrt{\frac{\left(x \cdot y + x \cdot z\right) \cdot \left(x \cdot y + x \cdot z\right) + \left(\left(y \cdot z\right) \cdot \left(y \cdot z\right) - \left(x \cdot y + x \cdot z\right) \cdot \left(y \cdot z\right)\right)}{{\left(x \cdot y + x \cdot z\right)}^{3} + {\left(y \cdot z\right)}^{3}}}}}\right)\right) \]
    6. metadata-evalN/A

      \[\leadsto \mathsf{*.f64}\left(2, \left(\frac{1}{\sqrt{\color{blue}{\frac{\left(x \cdot y + x \cdot z\right) \cdot \left(x \cdot y + x \cdot z\right) + \left(\left(y \cdot z\right) \cdot \left(y \cdot z\right) - \left(x \cdot y + x \cdot z\right) \cdot \left(y \cdot z\right)\right)}{{\left(x \cdot y + x \cdot z\right)}^{3} + {\left(y \cdot z\right)}^{3}}}}}\right)\right) \]
    7. /-lowering-/.f64N/A

      \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \color{blue}{\left(\sqrt{\frac{\left(x \cdot y + x \cdot z\right) \cdot \left(x \cdot y + x \cdot z\right) + \left(\left(y \cdot z\right) \cdot \left(y \cdot z\right) - \left(x \cdot y + x \cdot z\right) \cdot \left(y \cdot z\right)\right)}{{\left(x \cdot y + x \cdot z\right)}^{3} + {\left(y \cdot z\right)}^{3}}}\right)}\right)\right) \]
  6. Applied egg-rr68.9%

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

    \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\color{blue}{\left(\frac{-1}{y \cdot \left(-1 \cdot x + -1 \cdot z\right)}\right)}\right)\right)\right) \]
  8. Step-by-step derivation
    1. associate-/r*N/A

      \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\left(\frac{\frac{-1}{y}}{-1 \cdot x + -1 \cdot z}\right)\right)\right)\right) \]
    2. /-lowering-/.f64N/A

      \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\left(\frac{-1}{y}\right), \left(-1 \cdot x + -1 \cdot z\right)\right)\right)\right)\right) \]
    3. /-lowering-/.f64N/A

      \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(-1, y\right), \left(-1 \cdot x + -1 \cdot z\right)\right)\right)\right)\right) \]
    4. +-commutativeN/A

      \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(-1, y\right), \left(-1 \cdot z + -1 \cdot x\right)\right)\right)\right)\right) \]
    5. mul-1-negN/A

      \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(-1, y\right), \left(-1 \cdot z + \left(\mathsf{neg}\left(x\right)\right)\right)\right)\right)\right)\right) \]
    6. unsub-negN/A

      \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(-1, y\right), \left(-1 \cdot z - x\right)\right)\right)\right)\right) \]
    7. --lowering--.f64N/A

      \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(-1, y\right), \mathsf{\_.f64}\left(\left(-1 \cdot z\right), x\right)\right)\right)\right)\right) \]
    8. mul-1-negN/A

      \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(-1, y\right), \mathsf{\_.f64}\left(\left(\mathsf{neg}\left(z\right)\right), x\right)\right)\right)\right)\right) \]
    9. neg-sub0N/A

      \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(-1, y\right), \mathsf{\_.f64}\left(\left(0 - z\right), x\right)\right)\right)\right)\right) \]
    10. --lowering--.f6447.5%

      \[\leadsto \mathsf{*.f64}\left(2, \mathsf{/.f64}\left(1, \mathsf{sqrt.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(-1, y\right), \mathsf{\_.f64}\left(\mathsf{\_.f64}\left(0, z\right), x\right)\right)\right)\right)\right) \]
  9. Simplified47.5%

    \[\leadsto 2 \cdot \frac{1}{\sqrt{\color{blue}{\frac{\frac{-1}{y}}{\left(0 - z\right) - x}}}} \]
  10. Step-by-step derivation
    1. pow1/2N/A

      \[\leadsto \mathsf{*.f64}\left(2, \left(\frac{1}{{\left(\frac{\frac{-1}{y}}{\left(0 - z\right) - x}\right)}^{\color{blue}{\frac{1}{2}}}}\right)\right) \]
    2. pow-flipN/A

      \[\leadsto \mathsf{*.f64}\left(2, \left({\left(\frac{\frac{-1}{y}}{\left(0 - z\right) - x}\right)}^{\color{blue}{\left(\mathsf{neg}\left(\frac{1}{2}\right)\right)}}\right)\right) \]
    3. metadata-evalN/A

      \[\leadsto \mathsf{*.f64}\left(2, \left({\left(\frac{\frac{-1}{y}}{\left(0 - z\right) - x}\right)}^{\frac{-1}{2}}\right)\right) \]
    4. pow-lowering-pow.f64N/A

      \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\left(\frac{\frac{-1}{y}}{\left(0 - z\right) - x}\right), \color{blue}{\frac{-1}{2}}\right)\right) \]
    5. associate-/l/N/A

      \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\left(\frac{-1}{\left(\left(0 - z\right) - x\right) \cdot y}\right), \frac{-1}{2}\right)\right) \]
    6. associate-/r*N/A

      \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\left(\frac{\frac{-1}{\left(0 - z\right) - x}}{y}\right), \frac{-1}{2}\right)\right) \]
    7. frac-2negN/A

      \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\left(\frac{\frac{\mathsf{neg}\left(-1\right)}{\mathsf{neg}\left(\left(\left(0 - z\right) - x\right)\right)}}{y}\right), \frac{-1}{2}\right)\right) \]
    8. metadata-evalN/A

      \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\left(\frac{\frac{1}{\mathsf{neg}\left(\left(\left(0 - z\right) - x\right)\right)}}{y}\right), \frac{-1}{2}\right)\right) \]
    9. /-lowering-/.f64N/A

      \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\mathsf{/.f64}\left(\left(\frac{1}{\mathsf{neg}\left(\left(\left(0 - z\right) - x\right)\right)}\right), y\right), \frac{-1}{2}\right)\right) \]
    10. associate--l-N/A

      \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\mathsf{/.f64}\left(\left(\frac{1}{\mathsf{neg}\left(\left(0 - \left(z + x\right)\right)\right)}\right), y\right), \frac{-1}{2}\right)\right) \]
    11. sub0-negN/A

      \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\mathsf{/.f64}\left(\left(\frac{1}{\mathsf{neg}\left(\left(\mathsf{neg}\left(\left(z + x\right)\right)\right)\right)}\right), y\right), \frac{-1}{2}\right)\right) \]
    12. remove-double-negN/A

      \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\mathsf{/.f64}\left(\left(\frac{1}{z + x}\right), y\right), \frac{-1}{2}\right)\right) \]
    13. /-lowering-/.f64N/A

      \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(1, \left(z + x\right)\right), y\right), \frac{-1}{2}\right)\right) \]
    14. +-lowering-+.f6447.6%

      \[\leadsto \mathsf{*.f64}\left(2, \mathsf{pow.f64}\left(\mathsf{/.f64}\left(\mathsf{/.f64}\left(1, \mathsf{+.f64}\left(z, x\right)\right), y\right), \frac{-1}{2}\right)\right) \]
  11. Applied egg-rr47.6%

    \[\leadsto 2 \cdot \color{blue}{{\left(\frac{\frac{1}{z + x}}{y}\right)}^{-0.5}} \]
  12. Add Preprocessing

Alternative 11: 35.4% accurate, 1.1× speedup?

\[\begin{array}{l} [x, y, z] = \mathsf{sort}([x, y, z])\\ \\ 2 \cdot \sqrt{y \cdot x} \end{array} \]
NOTE: x, y, and z should be sorted in increasing order before calling this function.
(FPCore (x y z) :precision binary64 (* 2.0 (sqrt (* y x))))
assert(x < y && y < z);
double code(double x, double y, double z) {
	return 2.0 * sqrt((y * x));
}
NOTE: x, y, and z should be sorted in increasing order before calling this function.
real(8) function code(x, y, z)
    real(8), intent (in) :: x
    real(8), intent (in) :: y
    real(8), intent (in) :: z
    code = 2.0d0 * sqrt((y * x))
end function
assert x < y && y < z;
public static double code(double x, double y, double z) {
	return 2.0 * Math.sqrt((y * x));
}
[x, y, z] = sort([x, y, z])
def code(x, y, z):
	return 2.0 * math.sqrt((y * x))
x, y, z = sort([x, y, z])
function code(x, y, z)
	return Float64(2.0 * sqrt(Float64(y * x)))
end
x, y, z = num2cell(sort([x, y, z])){:}
function tmp = code(x, y, z)
	tmp = 2.0 * sqrt((y * x));
end
NOTE: x, y, and z should be sorted in increasing order before calling this function.
code[x_, y_, z_] := N[(2.0 * N[Sqrt[N[(y * x), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
[x, y, z] = \mathsf{sort}([x, y, z])\\
\\
2 \cdot \sqrt{y \cdot x}
\end{array}
Derivation
  1. Initial program 69.1%

    \[2 \cdot \sqrt{\left(x \cdot y + x \cdot z\right) + y \cdot z} \]
  2. Step-by-step derivation
    1. *-lowering-*.f64N/A

      \[\leadsto \mathsf{*.f64}\left(2, \color{blue}{\left(\sqrt{\left(x \cdot y + x \cdot z\right) + y \cdot z}\right)}\right) \]
    2. sqrt-lowering-sqrt.f64N/A

      \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\left(\left(x \cdot y + x \cdot z\right) + y \cdot z\right)\right)\right) \]
    3. associate-+l+N/A

      \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\left(x \cdot y + \left(x \cdot z + y \cdot z\right)\right)\right)\right) \]
    4. +-lowering-+.f64N/A

      \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\left(x \cdot y\right), \left(x \cdot z + y \cdot z\right)\right)\right)\right) \]
    5. *-lowering-*.f64N/A

      \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \left(x \cdot z + y \cdot z\right)\right)\right)\right) \]
    6. distribute-rgt-outN/A

      \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \left(z \cdot \left(x + y\right)\right)\right)\right)\right) \]
    7. *-lowering-*.f64N/A

      \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \mathsf{*.f64}\left(z, \left(x + y\right)\right)\right)\right)\right) \]
    8. +-lowering-+.f6469.2%

      \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(x, y\right), \mathsf{*.f64}\left(z, \mathsf{+.f64}\left(x, y\right)\right)\right)\right)\right) \]
  3. Simplified69.2%

    \[\leadsto \color{blue}{2 \cdot \sqrt{x \cdot y + z \cdot \left(x + y\right)}} \]
  4. Add Preprocessing
  5. Taylor expanded in z around 0

    \[\leadsto \color{blue}{2 \cdot \sqrt{x \cdot y}} \]
  6. Step-by-step derivation
    1. *-lowering-*.f64N/A

      \[\leadsto \mathsf{*.f64}\left(2, \color{blue}{\left(\sqrt{x \cdot y}\right)}\right) \]
    2. sqrt-lowering-sqrt.f64N/A

      \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\left(x \cdot y\right)\right)\right) \]
    3. *-commutativeN/A

      \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\left(y \cdot x\right)\right)\right) \]
    4. *-lowering-*.f6425.5%

      \[\leadsto \mathsf{*.f64}\left(2, \mathsf{sqrt.f64}\left(\mathsf{*.f64}\left(y, x\right)\right)\right) \]
  7. Simplified25.5%

    \[\leadsto \color{blue}{2 \cdot \sqrt{y \cdot x}} \]
  8. Add Preprocessing

Developer Target 1: 82.2% accurate, 0.1× speedup?

\[\begin{array}{l} \\ \begin{array}{l} t_0 := 0.25 \cdot \left(\left({y}^{-0.75} \cdot \left({z}^{-0.75} \cdot x\right)\right) \cdot \left(y + z\right)\right) + {z}^{0.25} \cdot {y}^{0.25}\\ \mathbf{if}\;z < 7.636950090573675 \cdot 10^{+176}:\\ \;\;\;\;2 \cdot \sqrt{\left(x + y\right) \cdot z + x \cdot y}\\ \mathbf{else}:\\ \;\;\;\;\left(t\_0 \cdot t\_0\right) \cdot 2\\ \end{array} \end{array} \]
(FPCore (x y z)
 :precision binary64
 (let* ((t_0
         (+
          (* 0.25 (* (* (pow y -0.75) (* (pow z -0.75) x)) (+ y z)))
          (* (pow z 0.25) (pow y 0.25)))))
   (if (< z 7.636950090573675e+176)
     (* 2.0 (sqrt (+ (* (+ x y) z) (* x y))))
     (* (* t_0 t_0) 2.0))))
double code(double x, double y, double z) {
	double t_0 = (0.25 * ((pow(y, -0.75) * (pow(z, -0.75) * x)) * (y + z))) + (pow(z, 0.25) * pow(y, 0.25));
	double tmp;
	if (z < 7.636950090573675e+176) {
		tmp = 2.0 * sqrt((((x + y) * z) + (x * y)));
	} else {
		tmp = (t_0 * t_0) * 2.0;
	}
	return tmp;
}
real(8) function code(x, y, z)
    real(8), intent (in) :: x
    real(8), intent (in) :: y
    real(8), intent (in) :: z
    real(8) :: t_0
    real(8) :: tmp
    t_0 = (0.25d0 * (((y ** (-0.75d0)) * ((z ** (-0.75d0)) * x)) * (y + z))) + ((z ** 0.25d0) * (y ** 0.25d0))
    if (z < 7.636950090573675d+176) then
        tmp = 2.0d0 * sqrt((((x + y) * z) + (x * y)))
    else
        tmp = (t_0 * t_0) * 2.0d0
    end if
    code = tmp
end function
public static double code(double x, double y, double z) {
	double t_0 = (0.25 * ((Math.pow(y, -0.75) * (Math.pow(z, -0.75) * x)) * (y + z))) + (Math.pow(z, 0.25) * Math.pow(y, 0.25));
	double tmp;
	if (z < 7.636950090573675e+176) {
		tmp = 2.0 * Math.sqrt((((x + y) * z) + (x * y)));
	} else {
		tmp = (t_0 * t_0) * 2.0;
	}
	return tmp;
}
def code(x, y, z):
	t_0 = (0.25 * ((math.pow(y, -0.75) * (math.pow(z, -0.75) * x)) * (y + z))) + (math.pow(z, 0.25) * math.pow(y, 0.25))
	tmp = 0
	if z < 7.636950090573675e+176:
		tmp = 2.0 * math.sqrt((((x + y) * z) + (x * y)))
	else:
		tmp = (t_0 * t_0) * 2.0
	return tmp
function code(x, y, z)
	t_0 = Float64(Float64(0.25 * Float64(Float64((y ^ -0.75) * Float64((z ^ -0.75) * x)) * Float64(y + z))) + Float64((z ^ 0.25) * (y ^ 0.25)))
	tmp = 0.0
	if (z < 7.636950090573675e+176)
		tmp = Float64(2.0 * sqrt(Float64(Float64(Float64(x + y) * z) + Float64(x * y))));
	else
		tmp = Float64(Float64(t_0 * t_0) * 2.0);
	end
	return tmp
end
function tmp_2 = code(x, y, z)
	t_0 = (0.25 * (((y ^ -0.75) * ((z ^ -0.75) * x)) * (y + z))) + ((z ^ 0.25) * (y ^ 0.25));
	tmp = 0.0;
	if (z < 7.636950090573675e+176)
		tmp = 2.0 * sqrt((((x + y) * z) + (x * y)));
	else
		tmp = (t_0 * t_0) * 2.0;
	end
	tmp_2 = tmp;
end
code[x_, y_, z_] := Block[{t$95$0 = N[(N[(0.25 * N[(N[(N[Power[y, -0.75], $MachinePrecision] * N[(N[Power[z, -0.75], $MachinePrecision] * x), $MachinePrecision]), $MachinePrecision] * N[(y + z), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(N[Power[z, 0.25], $MachinePrecision] * N[Power[y, 0.25], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[Less[z, 7.636950090573675e+176], N[(2.0 * N[Sqrt[N[(N[(N[(x + y), $MachinePrecision] * z), $MachinePrecision] + N[(x * y), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(N[(t$95$0 * t$95$0), $MachinePrecision] * 2.0), $MachinePrecision]]]
\begin{array}{l}

\\
\begin{array}{l}
t_0 := 0.25 \cdot \left(\left({y}^{-0.75} \cdot \left({z}^{-0.75} \cdot x\right)\right) \cdot \left(y + z\right)\right) + {z}^{0.25} \cdot {y}^{0.25}\\
\mathbf{if}\;z < 7.636950090573675 \cdot 10^{+176}:\\
\;\;\;\;2 \cdot \sqrt{\left(x + y\right) \cdot z + x \cdot y}\\

\mathbf{else}:\\
\;\;\;\;\left(t\_0 \cdot t\_0\right) \cdot 2\\


\end{array}
\end{array}

Reproduce

?
herbie shell --seed 2024191 
(FPCore (x y z)
  :name "Diagrams.TwoD.Apollonian:descartes from diagrams-contrib-1.3.0.5"
  :precision binary64

  :alt
  (! :herbie-platform default (if (< z 763695009057367500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) (* 2 (sqrt (+ (* (+ x y) z) (* x y)))) (* (* (+ (* 1/4 (* (* (pow y -3/4) (* (pow z -3/4) x)) (+ y z))) (* (pow z 1/4) (pow y 1/4))) (+ (* 1/4 (* (* (pow y -3/4) (* (pow z -3/4) x)) (+ y z))) (* (pow z 1/4) (pow y 1/4)))) 2)))

  (* 2.0 (sqrt (+ (+ (* x y) (* x z)) (* y z)))))