math.sqrt on complex, real part

Percentage Accurate: 40.8% → 89.6%
Time: 12.4s
Alternatives: 6
Speedup: 2.0×

Specification

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

\\
0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}
\end{array}

Sampling outcomes in binary64 precision:

Local Percentage Accuracy vs ?

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

Accuracy vs Speed?

Herbie found 6 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: 40.8% accurate, 1.0× speedup?

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

\\
0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}
\end{array}

Alternative 1: 89.6% accurate, 0.5× speedup?

\[\begin{array}{l} im_m = \left|im\right| \\ \begin{array}{l} \mathbf{if}\;re + \sqrt{re \cdot re + im\_m \cdot im\_m} \leq 0:\\ \;\;\;\;0.5 \cdot {\left({\left(\frac{-1}{re}\right)}^{0.25} \cdot {im\_m}^{0.5}\right)}^{2}\\ \mathbf{else}:\\ \;\;\;\;\sqrt{0.5 \cdot \left(re + \mathsf{hypot}\left(im\_m, re\right)\right)}\\ \end{array} \end{array} \]
im_m = (fabs.f64 im)
(FPCore (re im_m)
 :precision binary64
 (if (<= (+ re (sqrt (+ (* re re) (* im_m im_m)))) 0.0)
   (* 0.5 (pow (* (pow (/ -1.0 re) 0.25) (pow im_m 0.5)) 2.0))
   (sqrt (* 0.5 (+ re (hypot im_m re))))))
im_m = fabs(im);
double code(double re, double im_m) {
	double tmp;
	if ((re + sqrt(((re * re) + (im_m * im_m)))) <= 0.0) {
		tmp = 0.5 * pow((pow((-1.0 / re), 0.25) * pow(im_m, 0.5)), 2.0);
	} else {
		tmp = sqrt((0.5 * (re + hypot(im_m, re))));
	}
	return tmp;
}
im_m = Math.abs(im);
public static double code(double re, double im_m) {
	double tmp;
	if ((re + Math.sqrt(((re * re) + (im_m * im_m)))) <= 0.0) {
		tmp = 0.5 * Math.pow((Math.pow((-1.0 / re), 0.25) * Math.pow(im_m, 0.5)), 2.0);
	} else {
		tmp = Math.sqrt((0.5 * (re + Math.hypot(im_m, re))));
	}
	return tmp;
}
im_m = math.fabs(im)
def code(re, im_m):
	tmp = 0
	if (re + math.sqrt(((re * re) + (im_m * im_m)))) <= 0.0:
		tmp = 0.5 * math.pow((math.pow((-1.0 / re), 0.25) * math.pow(im_m, 0.5)), 2.0)
	else:
		tmp = math.sqrt((0.5 * (re + math.hypot(im_m, re))))
	return tmp
im_m = abs(im)
function code(re, im_m)
	tmp = 0.0
	if (Float64(re + sqrt(Float64(Float64(re * re) + Float64(im_m * im_m)))) <= 0.0)
		tmp = Float64(0.5 * (Float64((Float64(-1.0 / re) ^ 0.25) * (im_m ^ 0.5)) ^ 2.0));
	else
		tmp = sqrt(Float64(0.5 * Float64(re + hypot(im_m, re))));
	end
	return tmp
end
im_m = abs(im);
function tmp_2 = code(re, im_m)
	tmp = 0.0;
	if ((re + sqrt(((re * re) + (im_m * im_m)))) <= 0.0)
		tmp = 0.5 * ((((-1.0 / re) ^ 0.25) * (im_m ^ 0.5)) ^ 2.0);
	else
		tmp = sqrt((0.5 * (re + hypot(im_m, re))));
	end
	tmp_2 = tmp;
end
im_m = N[Abs[im], $MachinePrecision]
code[re_, im$95$m_] := If[LessEqual[N[(re + N[Sqrt[N[(N[(re * re), $MachinePrecision] + N[(im$95$m * im$95$m), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], 0.0], N[(0.5 * N[Power[N[(N[Power[N[(-1.0 / re), $MachinePrecision], 0.25], $MachinePrecision] * N[Power[im$95$m, 0.5], $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision], N[Sqrt[N[(0.5 * N[(re + N[Sqrt[im$95$m ^ 2 + re ^ 2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]]
\begin{array}{l}
im_m = \left|im\right|

\\
\begin{array}{l}
\mathbf{if}\;re + \sqrt{re \cdot re + im\_m \cdot im\_m} \leq 0:\\
\;\;\;\;0.5 \cdot {\left({\left(\frac{-1}{re}\right)}^{0.25} \cdot {im\_m}^{0.5}\right)}^{2}\\

\mathbf{else}:\\
\;\;\;\;\sqrt{0.5 \cdot \left(re + \mathsf{hypot}\left(im\_m, re\right)\right)}\\


\end{array}
\end{array}
Derivation
  1. Split input into 2 regimes
  2. if (+.f64 (sqrt.f64 (+.f64 (*.f64 re re) (*.f64 im im))) re) < 0.0

    1. Initial program 5.0%

      \[0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)} \]
    2. Step-by-step derivation
      1. sqr-neg5.0%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + \color{blue}{\left(-im\right) \cdot \left(-im\right)}} + re\right)} \]
      2. +-commutative5.0%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \color{blue}{\left(re + \sqrt{re \cdot re + \left(-im\right) \cdot \left(-im\right)}\right)}} \]
      3. sqr-neg5.0%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \sqrt{re \cdot re + \color{blue}{im \cdot im}}\right)} \]
      4. +-commutative5.0%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \sqrt{\color{blue}{im \cdot im + re \cdot re}}\right)} \]
      5. distribute-rgt-in5.0%

        \[\leadsto 0.5 \cdot \sqrt{\color{blue}{re \cdot 2 + \sqrt{im \cdot im + re \cdot re} \cdot 2}} \]
      6. cancel-sign-sub5.0%

        \[\leadsto 0.5 \cdot \sqrt{\color{blue}{re \cdot 2 - \left(-\sqrt{im \cdot im + re \cdot re}\right) \cdot 2}} \]
      7. distribute-rgt-out--5.0%

        \[\leadsto 0.5 \cdot \sqrt{\color{blue}{2 \cdot \left(re - \left(-\sqrt{im \cdot im + re \cdot re}\right)\right)}} \]
      8. sub-neg5.0%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \color{blue}{\left(re + \left(-\left(-\sqrt{im \cdot im + re \cdot re}\right)\right)\right)}} \]
      9. remove-double-neg5.0%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \color{blue}{\sqrt{im \cdot im + re \cdot re}}\right)} \]
      10. +-commutative5.0%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \sqrt{\color{blue}{re \cdot re + im \cdot im}}\right)} \]
      11. hypot-define17.6%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \color{blue}{\mathsf{hypot}\left(re, im\right)}\right)} \]
    3. Simplified17.6%

      \[\leadsto \color{blue}{0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}} \]
    4. Add Preprocessing
    5. Step-by-step derivation
      1. add-sqr-sqrt17.5%

        \[\leadsto 0.5 \cdot \color{blue}{\left(\sqrt{\sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}} \cdot \sqrt{\sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}}\right)} \]
      2. pow217.5%

        \[\leadsto 0.5 \cdot \color{blue}{{\left(\sqrt{\sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}}\right)}^{2}} \]
      3. pow1/217.5%

        \[\leadsto 0.5 \cdot {\left(\sqrt{\color{blue}{{\left(2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)\right)}^{0.5}}}\right)}^{2} \]
      4. hypot-define5.0%

        \[\leadsto 0.5 \cdot {\left(\sqrt{{\left(2 \cdot \left(re + \color{blue}{\sqrt{re \cdot re + im \cdot im}}\right)\right)}^{0.5}}\right)}^{2} \]
      5. +-commutative5.0%

        \[\leadsto 0.5 \cdot {\left(\sqrt{{\left(2 \cdot \color{blue}{\left(\sqrt{re \cdot re + im \cdot im} + re\right)}\right)}^{0.5}}\right)}^{2} \]
      6. sqrt-pow15.0%

        \[\leadsto 0.5 \cdot {\color{blue}{\left({\left(2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)\right)}^{\left(\frac{0.5}{2}\right)}\right)}}^{2} \]
      7. +-commutative5.0%

        \[\leadsto 0.5 \cdot {\left({\left(2 \cdot \color{blue}{\left(re + \sqrt{re \cdot re + im \cdot im}\right)}\right)}^{\left(\frac{0.5}{2}\right)}\right)}^{2} \]
      8. hypot-define17.5%

        \[\leadsto 0.5 \cdot {\left({\left(2 \cdot \left(re + \color{blue}{\mathsf{hypot}\left(re, im\right)}\right)\right)}^{\left(\frac{0.5}{2}\right)}\right)}^{2} \]
      9. metadata-eval17.5%

        \[\leadsto 0.5 \cdot {\left({\left(2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)\right)}^{\color{blue}{0.25}}\right)}^{2} \]
    6. Applied egg-rr17.5%

      \[\leadsto 0.5 \cdot \color{blue}{{\left({\left(2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)\right)}^{0.25}\right)}^{2}} \]
    7. Taylor expanded in re around -inf 35.5%

      \[\leadsto 0.5 \cdot \color{blue}{{\left(e^{0.25 \cdot \left(\log \left(\frac{-1}{re}\right) + \log \left({im}^{2}\right)\right)}\right)}^{2}} \]
    8. Step-by-step derivation
      1. distribute-lft-in35.5%

        \[\leadsto 0.5 \cdot {\left(e^{\color{blue}{0.25 \cdot \log \left(\frac{-1}{re}\right) + 0.25 \cdot \log \left({im}^{2}\right)}}\right)}^{2} \]
      2. exp-sum35.6%

        \[\leadsto 0.5 \cdot {\color{blue}{\left(e^{0.25 \cdot \log \left(\frac{-1}{re}\right)} \cdot e^{0.25 \cdot \log \left({im}^{2}\right)}\right)}}^{2} \]
      3. log-pow46.3%

        \[\leadsto 0.5 \cdot {\left(e^{0.25 \cdot \log \left(\frac{-1}{re}\right)} \cdot e^{0.25 \cdot \color{blue}{\left(2 \cdot \log im\right)}}\right)}^{2} \]
      4. associate-*r*46.3%

        \[\leadsto 0.5 \cdot {\left(e^{0.25 \cdot \log \left(\frac{-1}{re}\right)} \cdot e^{\color{blue}{\left(0.25 \cdot 2\right) \cdot \log im}}\right)}^{2} \]
      5. metadata-eval46.3%

        \[\leadsto 0.5 \cdot {\left(e^{0.25 \cdot \log \left(\frac{-1}{re}\right)} \cdot e^{\color{blue}{0.5} \cdot \log im}\right)}^{2} \]
    9. Applied egg-rr46.3%

      \[\leadsto 0.5 \cdot {\color{blue}{\left(e^{0.25 \cdot \log \left(\frac{-1}{re}\right)} \cdot e^{0.5 \cdot \log im}\right)}}^{2} \]
    10. Step-by-step derivation
      1. *-commutative46.3%

        \[\leadsto 0.5 \cdot {\left(e^{\color{blue}{\log \left(\frac{-1}{re}\right) \cdot 0.25}} \cdot e^{0.5 \cdot \log im}\right)}^{2} \]
      2. exp-to-pow46.3%

        \[\leadsto 0.5 \cdot {\left(\color{blue}{{\left(\frac{-1}{re}\right)}^{0.25}} \cdot e^{0.5 \cdot \log im}\right)}^{2} \]
      3. *-commutative46.3%

        \[\leadsto 0.5 \cdot {\left({\left(\frac{-1}{re}\right)}^{0.25} \cdot e^{\color{blue}{\log im \cdot 0.5}}\right)}^{2} \]
      4. exp-to-pow50.2%

        \[\leadsto 0.5 \cdot {\left({\left(\frac{-1}{re}\right)}^{0.25} \cdot \color{blue}{{im}^{0.5}}\right)}^{2} \]
    11. Simplified50.2%

      \[\leadsto 0.5 \cdot {\color{blue}{\left({\left(\frac{-1}{re}\right)}^{0.25} \cdot {im}^{0.5}\right)}}^{2} \]

    if 0.0 < (+.f64 (sqrt.f64 (+.f64 (*.f64 re re) (*.f64 im im))) re)

    1. Initial program 49.1%

      \[0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)} \]
    2. Step-by-step derivation
      1. sqr-neg49.1%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + \color{blue}{\left(-im\right) \cdot \left(-im\right)}} + re\right)} \]
      2. +-commutative49.1%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \color{blue}{\left(re + \sqrt{re \cdot re + \left(-im\right) \cdot \left(-im\right)}\right)}} \]
      3. sqr-neg49.1%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \sqrt{re \cdot re + \color{blue}{im \cdot im}}\right)} \]
      4. +-commutative49.1%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \sqrt{\color{blue}{im \cdot im + re \cdot re}}\right)} \]
      5. distribute-rgt-in49.1%

        \[\leadsto 0.5 \cdot \sqrt{\color{blue}{re \cdot 2 + \sqrt{im \cdot im + re \cdot re} \cdot 2}} \]
      6. cancel-sign-sub49.1%

        \[\leadsto 0.5 \cdot \sqrt{\color{blue}{re \cdot 2 - \left(-\sqrt{im \cdot im + re \cdot re}\right) \cdot 2}} \]
      7. distribute-rgt-out--49.1%

        \[\leadsto 0.5 \cdot \sqrt{\color{blue}{2 \cdot \left(re - \left(-\sqrt{im \cdot im + re \cdot re}\right)\right)}} \]
      8. sub-neg49.1%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \color{blue}{\left(re + \left(-\left(-\sqrt{im \cdot im + re \cdot re}\right)\right)\right)}} \]
      9. remove-double-neg49.1%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \color{blue}{\sqrt{im \cdot im + re \cdot re}}\right)} \]
      10. +-commutative49.1%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \sqrt{\color{blue}{re \cdot re + im \cdot im}}\right)} \]
      11. hypot-define90.7%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \color{blue}{\mathsf{hypot}\left(re, im\right)}\right)} \]
    3. Simplified90.7%

      \[\leadsto \color{blue}{0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}} \]
    4. Add Preprocessing
    5. Step-by-step derivation
      1. add-sqr-sqrt90.0%

        \[\leadsto \color{blue}{\sqrt{0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}} \cdot \sqrt{0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}}} \]
      2. sqrt-unprod90.7%

        \[\leadsto \color{blue}{\sqrt{\left(0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}\right) \cdot \left(0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}\right)}} \]
      3. *-commutative90.7%

        \[\leadsto \sqrt{\color{blue}{\left(\sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)} \cdot 0.5\right)} \cdot \left(0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}\right)} \]
      4. *-commutative90.7%

        \[\leadsto \sqrt{\left(\sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)} \cdot 0.5\right) \cdot \color{blue}{\left(\sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)} \cdot 0.5\right)}} \]
      5. swap-sqr90.7%

        \[\leadsto \sqrt{\color{blue}{\left(\sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)} \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}\right) \cdot \left(0.5 \cdot 0.5\right)}} \]
      6. add-sqr-sqrt90.7%

        \[\leadsto \sqrt{\color{blue}{\left(2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)\right)} \cdot \left(0.5 \cdot 0.5\right)} \]
      7. metadata-eval90.7%

        \[\leadsto \sqrt{\left(2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)\right) \cdot \color{blue}{0.25}} \]
    6. Applied egg-rr90.7%

      \[\leadsto \color{blue}{\sqrt{\left(2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)\right) \cdot 0.25}} \]
    7. Step-by-step derivation
      1. *-commutative90.7%

        \[\leadsto \sqrt{\color{blue}{0.25 \cdot \left(2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)\right)}} \]
      2. associate-*r*91.1%

        \[\leadsto \sqrt{\color{blue}{\left(0.25 \cdot 2\right) \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}} \]
      3. metadata-eval91.1%

        \[\leadsto \sqrt{\color{blue}{0.5} \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)} \]
      4. hypot-undefine49.1%

        \[\leadsto \sqrt{0.5 \cdot \left(re + \color{blue}{\sqrt{re \cdot re + im \cdot im}}\right)} \]
      5. unpow249.1%

        \[\leadsto \sqrt{0.5 \cdot \left(re + \sqrt{\color{blue}{{re}^{2}} + im \cdot im}\right)} \]
      6. unpow249.1%

        \[\leadsto \sqrt{0.5 \cdot \left(re + \sqrt{{re}^{2} + \color{blue}{{im}^{2}}}\right)} \]
      7. +-commutative49.1%

        \[\leadsto \sqrt{0.5 \cdot \left(re + \sqrt{\color{blue}{{im}^{2} + {re}^{2}}}\right)} \]
      8. unpow249.1%

        \[\leadsto \sqrt{0.5 \cdot \left(re + \sqrt{\color{blue}{im \cdot im} + {re}^{2}}\right)} \]
      9. unpow249.1%

        \[\leadsto \sqrt{0.5 \cdot \left(re + \sqrt{im \cdot im + \color{blue}{re \cdot re}}\right)} \]
      10. hypot-undefine91.1%

        \[\leadsto \sqrt{0.5 \cdot \left(re + \color{blue}{\mathsf{hypot}\left(im, re\right)}\right)} \]
    8. Simplified91.1%

      \[\leadsto \color{blue}{\sqrt{0.5 \cdot \left(re + \mathsf{hypot}\left(im, re\right)\right)}} \]
  3. Recombined 2 regimes into one program.
  4. Final simplification84.9%

    \[\leadsto \begin{array}{l} \mathbf{if}\;re + \sqrt{re \cdot re + im \cdot im} \leq 0:\\ \;\;\;\;0.5 \cdot {\left({\left(\frac{-1}{re}\right)}^{0.25} \cdot {im}^{0.5}\right)}^{2}\\ \mathbf{else}:\\ \;\;\;\;\sqrt{0.5 \cdot \left(re + \mathsf{hypot}\left(im, re\right)\right)}\\ \end{array} \]
  5. Add Preprocessing

Alternative 2: 84.2% accurate, 0.5× speedup?

\[\begin{array}{l} im_m = \left|im\right| \\ \begin{array}{l} \mathbf{if}\;\sqrt{\left(re + \sqrt{re \cdot re + im\_m \cdot im\_m}\right) \cdot 2} \leq 0:\\ \;\;\;\;0.5 \cdot \sqrt{\frac{{im\_m}^{2}}{-re}}\\ \mathbf{else}:\\ \;\;\;\;\sqrt{0.5 \cdot \left(re + \mathsf{hypot}\left(im\_m, re\right)\right)}\\ \end{array} \end{array} \]
im_m = (fabs.f64 im)
(FPCore (re im_m)
 :precision binary64
 (if (<= (sqrt (* (+ re (sqrt (+ (* re re) (* im_m im_m)))) 2.0)) 0.0)
   (* 0.5 (sqrt (/ (pow im_m 2.0) (- re))))
   (sqrt (* 0.5 (+ re (hypot im_m re))))))
im_m = fabs(im);
double code(double re, double im_m) {
	double tmp;
	if (sqrt(((re + sqrt(((re * re) + (im_m * im_m)))) * 2.0)) <= 0.0) {
		tmp = 0.5 * sqrt((pow(im_m, 2.0) / -re));
	} else {
		tmp = sqrt((0.5 * (re + hypot(im_m, re))));
	}
	return tmp;
}
im_m = Math.abs(im);
public static double code(double re, double im_m) {
	double tmp;
	if (Math.sqrt(((re + Math.sqrt(((re * re) + (im_m * im_m)))) * 2.0)) <= 0.0) {
		tmp = 0.5 * Math.sqrt((Math.pow(im_m, 2.0) / -re));
	} else {
		tmp = Math.sqrt((0.5 * (re + Math.hypot(im_m, re))));
	}
	return tmp;
}
im_m = math.fabs(im)
def code(re, im_m):
	tmp = 0
	if math.sqrt(((re + math.sqrt(((re * re) + (im_m * im_m)))) * 2.0)) <= 0.0:
		tmp = 0.5 * math.sqrt((math.pow(im_m, 2.0) / -re))
	else:
		tmp = math.sqrt((0.5 * (re + math.hypot(im_m, re))))
	return tmp
im_m = abs(im)
function code(re, im_m)
	tmp = 0.0
	if (sqrt(Float64(Float64(re + sqrt(Float64(Float64(re * re) + Float64(im_m * im_m)))) * 2.0)) <= 0.0)
		tmp = Float64(0.5 * sqrt(Float64((im_m ^ 2.0) / Float64(-re))));
	else
		tmp = sqrt(Float64(0.5 * Float64(re + hypot(im_m, re))));
	end
	return tmp
end
im_m = abs(im);
function tmp_2 = code(re, im_m)
	tmp = 0.0;
	if (sqrt(((re + sqrt(((re * re) + (im_m * im_m)))) * 2.0)) <= 0.0)
		tmp = 0.5 * sqrt(((im_m ^ 2.0) / -re));
	else
		tmp = sqrt((0.5 * (re + hypot(im_m, re))));
	end
	tmp_2 = tmp;
end
im_m = N[Abs[im], $MachinePrecision]
code[re_, im$95$m_] := If[LessEqual[N[Sqrt[N[(N[(re + N[Sqrt[N[(N[(re * re), $MachinePrecision] + N[(im$95$m * im$95$m), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * 2.0), $MachinePrecision]], $MachinePrecision], 0.0], N[(0.5 * N[Sqrt[N[(N[Power[im$95$m, 2.0], $MachinePrecision] / (-re)), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[Sqrt[N[(0.5 * N[(re + N[Sqrt[im$95$m ^ 2 + re ^ 2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]]
\begin{array}{l}
im_m = \left|im\right|

\\
\begin{array}{l}
\mathbf{if}\;\sqrt{\left(re + \sqrt{re \cdot re + im\_m \cdot im\_m}\right) \cdot 2} \leq 0:\\
\;\;\;\;0.5 \cdot \sqrt{\frac{{im\_m}^{2}}{-re}}\\

\mathbf{else}:\\
\;\;\;\;\sqrt{0.5 \cdot \left(re + \mathsf{hypot}\left(im\_m, re\right)\right)}\\


\end{array}
\end{array}
Derivation
  1. Split input into 2 regimes
  2. if (sqrt.f64 (*.f64 2 (+.f64 (sqrt.f64 (+.f64 (*.f64 re re) (*.f64 im im))) re))) < 0.0

    1. Initial program 6.7%

      \[0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)} \]
    2. Step-by-step derivation
      1. sqr-neg6.7%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + \color{blue}{\left(-im\right) \cdot \left(-im\right)}} + re\right)} \]
      2. +-commutative6.7%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \color{blue}{\left(re + \sqrt{re \cdot re + \left(-im\right) \cdot \left(-im\right)}\right)}} \]
      3. sqr-neg6.7%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \sqrt{re \cdot re + \color{blue}{im \cdot im}}\right)} \]
      4. +-commutative6.7%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \sqrt{\color{blue}{im \cdot im + re \cdot re}}\right)} \]
      5. distribute-rgt-in6.7%

        \[\leadsto 0.5 \cdot \sqrt{\color{blue}{re \cdot 2 + \sqrt{im \cdot im + re \cdot re} \cdot 2}} \]
      6. cancel-sign-sub6.7%

        \[\leadsto 0.5 \cdot \sqrt{\color{blue}{re \cdot 2 - \left(-\sqrt{im \cdot im + re \cdot re}\right) \cdot 2}} \]
      7. distribute-rgt-out--6.7%

        \[\leadsto 0.5 \cdot \sqrt{\color{blue}{2 \cdot \left(re - \left(-\sqrt{im \cdot im + re \cdot re}\right)\right)}} \]
      8. sub-neg6.7%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \color{blue}{\left(re + \left(-\left(-\sqrt{im \cdot im + re \cdot re}\right)\right)\right)}} \]
      9. remove-double-neg6.7%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \color{blue}{\sqrt{im \cdot im + re \cdot re}}\right)} \]
      10. +-commutative6.7%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \sqrt{\color{blue}{re \cdot re + im \cdot im}}\right)} \]
      11. hypot-define6.7%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \color{blue}{\mathsf{hypot}\left(re, im\right)}\right)} \]
    3. Simplified6.7%

      \[\leadsto \color{blue}{0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}} \]
    4. Add Preprocessing
    5. Taylor expanded in re around -inf 49.8%

      \[\leadsto 0.5 \cdot \sqrt{\color{blue}{-1 \cdot \frac{{im}^{2}}{re}}} \]
    6. Step-by-step derivation
      1. mul-1-neg49.8%

        \[\leadsto 0.5 \cdot \sqrt{\color{blue}{-\frac{{im}^{2}}{re}}} \]
      2. distribute-neg-frac249.8%

        \[\leadsto 0.5 \cdot \sqrt{\color{blue}{\frac{{im}^{2}}{-re}}} \]
    7. Simplified49.8%

      \[\leadsto 0.5 \cdot \sqrt{\color{blue}{\frac{{im}^{2}}{-re}}} \]

    if 0.0 < (sqrt.f64 (*.f64 2 (+.f64 (sqrt.f64 (+.f64 (*.f64 re re) (*.f64 im im))) re)))

    1. Initial program 46.9%

      \[0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)} \]
    2. Step-by-step derivation
      1. sqr-neg46.9%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + \color{blue}{\left(-im\right) \cdot \left(-im\right)}} + re\right)} \]
      2. +-commutative46.9%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \color{blue}{\left(re + \sqrt{re \cdot re + \left(-im\right) \cdot \left(-im\right)}\right)}} \]
      3. sqr-neg46.9%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \sqrt{re \cdot re + \color{blue}{im \cdot im}}\right)} \]
      4. +-commutative46.9%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \sqrt{\color{blue}{im \cdot im + re \cdot re}}\right)} \]
      5. distribute-rgt-in46.9%

        \[\leadsto 0.5 \cdot \sqrt{\color{blue}{re \cdot 2 + \sqrt{im \cdot im + re \cdot re} \cdot 2}} \]
      6. cancel-sign-sub46.9%

        \[\leadsto 0.5 \cdot \sqrt{\color{blue}{re \cdot 2 - \left(-\sqrt{im \cdot im + re \cdot re}\right) \cdot 2}} \]
      7. distribute-rgt-out--46.9%

        \[\leadsto 0.5 \cdot \sqrt{\color{blue}{2 \cdot \left(re - \left(-\sqrt{im \cdot im + re \cdot re}\right)\right)}} \]
      8. sub-neg46.9%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \color{blue}{\left(re + \left(-\left(-\sqrt{im \cdot im + re \cdot re}\right)\right)\right)}} \]
      9. remove-double-neg46.9%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \color{blue}{\sqrt{im \cdot im + re \cdot re}}\right)} \]
      10. +-commutative46.9%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \sqrt{\color{blue}{re \cdot re + im \cdot im}}\right)} \]
      11. hypot-define88.8%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \color{blue}{\mathsf{hypot}\left(re, im\right)}\right)} \]
    3. Simplified88.8%

      \[\leadsto \color{blue}{0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}} \]
    4. Add Preprocessing
    5. Step-by-step derivation
      1. add-sqr-sqrt88.1%

        \[\leadsto \color{blue}{\sqrt{0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}} \cdot \sqrt{0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}}} \]
      2. sqrt-unprod88.8%

        \[\leadsto \color{blue}{\sqrt{\left(0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}\right) \cdot \left(0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}\right)}} \]
      3. *-commutative88.8%

        \[\leadsto \sqrt{\color{blue}{\left(\sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)} \cdot 0.5\right)} \cdot \left(0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}\right)} \]
      4. *-commutative88.8%

        \[\leadsto \sqrt{\left(\sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)} \cdot 0.5\right) \cdot \color{blue}{\left(\sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)} \cdot 0.5\right)}} \]
      5. swap-sqr88.8%

        \[\leadsto \sqrt{\color{blue}{\left(\sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)} \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}\right) \cdot \left(0.5 \cdot 0.5\right)}} \]
      6. add-sqr-sqrt88.8%

        \[\leadsto \sqrt{\color{blue}{\left(2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)\right)} \cdot \left(0.5 \cdot 0.5\right)} \]
      7. metadata-eval88.8%

        \[\leadsto \sqrt{\left(2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)\right) \cdot \color{blue}{0.25}} \]
    6. Applied egg-rr88.8%

      \[\leadsto \color{blue}{\sqrt{\left(2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)\right) \cdot 0.25}} \]
    7. Step-by-step derivation
      1. *-commutative88.8%

        \[\leadsto \sqrt{\color{blue}{0.25 \cdot \left(2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)\right)}} \]
      2. associate-*r*89.3%

        \[\leadsto \sqrt{\color{blue}{\left(0.25 \cdot 2\right) \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}} \]
      3. metadata-eval89.3%

        \[\leadsto \sqrt{\color{blue}{0.5} \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)} \]
      4. hypot-undefine46.9%

        \[\leadsto \sqrt{0.5 \cdot \left(re + \color{blue}{\sqrt{re \cdot re + im \cdot im}}\right)} \]
      5. unpow246.9%

        \[\leadsto \sqrt{0.5 \cdot \left(re + \sqrt{\color{blue}{{re}^{2}} + im \cdot im}\right)} \]
      6. unpow246.9%

        \[\leadsto \sqrt{0.5 \cdot \left(re + \sqrt{{re}^{2} + \color{blue}{{im}^{2}}}\right)} \]
      7. +-commutative46.9%

        \[\leadsto \sqrt{0.5 \cdot \left(re + \sqrt{\color{blue}{{im}^{2} + {re}^{2}}}\right)} \]
      8. unpow246.9%

        \[\leadsto \sqrt{0.5 \cdot \left(re + \sqrt{\color{blue}{im \cdot im} + {re}^{2}}\right)} \]
      9. unpow246.9%

        \[\leadsto \sqrt{0.5 \cdot \left(re + \sqrt{im \cdot im + \color{blue}{re \cdot re}}\right)} \]
      10. hypot-undefine89.3%

        \[\leadsto \sqrt{0.5 \cdot \left(re + \color{blue}{\mathsf{hypot}\left(im, re\right)}\right)} \]
    8. Simplified89.3%

      \[\leadsto \color{blue}{\sqrt{0.5 \cdot \left(re + \mathsf{hypot}\left(im, re\right)\right)}} \]
  3. Recombined 2 regimes into one program.
  4. Final simplification84.8%

    \[\leadsto \begin{array}{l} \mathbf{if}\;\sqrt{\left(re + \sqrt{re \cdot re + im \cdot im}\right) \cdot 2} \leq 0:\\ \;\;\;\;0.5 \cdot \sqrt{\frac{{im}^{2}}{-re}}\\ \mathbf{else}:\\ \;\;\;\;\sqrt{0.5 \cdot \left(re + \mathsf{hypot}\left(im, re\right)\right)}\\ \end{array} \]
  5. Add Preprocessing

Alternative 3: 79.1% accurate, 1.0× speedup?

\[\begin{array}{l} im_m = \left|im\right| \\ \sqrt{0.5 \cdot \left(re + \mathsf{hypot}\left(im\_m, re\right)\right)} \end{array} \]
im_m = (fabs.f64 im)
(FPCore (re im_m) :precision binary64 (sqrt (* 0.5 (+ re (hypot im_m re)))))
im_m = fabs(im);
double code(double re, double im_m) {
	return sqrt((0.5 * (re + hypot(im_m, re))));
}
im_m = Math.abs(im);
public static double code(double re, double im_m) {
	return Math.sqrt((0.5 * (re + Math.hypot(im_m, re))));
}
im_m = math.fabs(im)
def code(re, im_m):
	return math.sqrt((0.5 * (re + math.hypot(im_m, re))))
im_m = abs(im)
function code(re, im_m)
	return sqrt(Float64(0.5 * Float64(re + hypot(im_m, re))))
end
im_m = abs(im);
function tmp = code(re, im_m)
	tmp = sqrt((0.5 * (re + hypot(im_m, re))));
end
im_m = N[Abs[im], $MachinePrecision]
code[re_, im$95$m_] := N[Sqrt[N[(0.5 * N[(re + N[Sqrt[im$95$m ^ 2 + re ^ 2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]
\begin{array}{l}
im_m = \left|im\right|

\\
\sqrt{0.5 \cdot \left(re + \mathsf{hypot}\left(im\_m, re\right)\right)}
\end{array}
Derivation
  1. Initial program 42.4%

    \[0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)} \]
  2. Step-by-step derivation
    1. sqr-neg42.4%

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + \color{blue}{\left(-im\right) \cdot \left(-im\right)}} + re\right)} \]
    2. +-commutative42.4%

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \color{blue}{\left(re + \sqrt{re \cdot re + \left(-im\right) \cdot \left(-im\right)}\right)}} \]
    3. sqr-neg42.4%

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \sqrt{re \cdot re + \color{blue}{im \cdot im}}\right)} \]
    4. +-commutative42.4%

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \sqrt{\color{blue}{im \cdot im + re \cdot re}}\right)} \]
    5. distribute-rgt-in42.4%

      \[\leadsto 0.5 \cdot \sqrt{\color{blue}{re \cdot 2 + \sqrt{im \cdot im + re \cdot re} \cdot 2}} \]
    6. cancel-sign-sub42.4%

      \[\leadsto 0.5 \cdot \sqrt{\color{blue}{re \cdot 2 - \left(-\sqrt{im \cdot im + re \cdot re}\right) \cdot 2}} \]
    7. distribute-rgt-out--42.4%

      \[\leadsto 0.5 \cdot \sqrt{\color{blue}{2 \cdot \left(re - \left(-\sqrt{im \cdot im + re \cdot re}\right)\right)}} \]
    8. sub-neg42.4%

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \color{blue}{\left(re + \left(-\left(-\sqrt{im \cdot im + re \cdot re}\right)\right)\right)}} \]
    9. remove-double-neg42.4%

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \color{blue}{\sqrt{im \cdot im + re \cdot re}}\right)} \]
    10. +-commutative42.4%

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \sqrt{\color{blue}{re \cdot re + im \cdot im}}\right)} \]
    11. hypot-define79.5%

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \color{blue}{\mathsf{hypot}\left(re, im\right)}\right)} \]
  3. Simplified79.5%

    \[\leadsto \color{blue}{0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}} \]
  4. Add Preprocessing
  5. Step-by-step derivation
    1. add-sqr-sqrt78.9%

      \[\leadsto \color{blue}{\sqrt{0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}} \cdot \sqrt{0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}}} \]
    2. sqrt-unprod79.5%

      \[\leadsto \color{blue}{\sqrt{\left(0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}\right) \cdot \left(0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}\right)}} \]
    3. *-commutative79.5%

      \[\leadsto \sqrt{\color{blue}{\left(\sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)} \cdot 0.5\right)} \cdot \left(0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}\right)} \]
    4. *-commutative79.5%

      \[\leadsto \sqrt{\left(\sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)} \cdot 0.5\right) \cdot \color{blue}{\left(\sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)} \cdot 0.5\right)}} \]
    5. swap-sqr79.5%

      \[\leadsto \sqrt{\color{blue}{\left(\sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)} \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}\right) \cdot \left(0.5 \cdot 0.5\right)}} \]
    6. add-sqr-sqrt79.5%

      \[\leadsto \sqrt{\color{blue}{\left(2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)\right)} \cdot \left(0.5 \cdot 0.5\right)} \]
    7. metadata-eval79.5%

      \[\leadsto \sqrt{\left(2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)\right) \cdot \color{blue}{0.25}} \]
  6. Applied egg-rr79.5%

    \[\leadsto \color{blue}{\sqrt{\left(2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)\right) \cdot 0.25}} \]
  7. Step-by-step derivation
    1. *-commutative79.5%

      \[\leadsto \sqrt{\color{blue}{0.25 \cdot \left(2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)\right)}} \]
    2. associate-*r*79.9%

      \[\leadsto \sqrt{\color{blue}{\left(0.25 \cdot 2\right) \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}} \]
    3. metadata-eval79.9%

      \[\leadsto \sqrt{\color{blue}{0.5} \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)} \]
    4. hypot-undefine42.4%

      \[\leadsto \sqrt{0.5 \cdot \left(re + \color{blue}{\sqrt{re \cdot re + im \cdot im}}\right)} \]
    5. unpow242.4%

      \[\leadsto \sqrt{0.5 \cdot \left(re + \sqrt{\color{blue}{{re}^{2}} + im \cdot im}\right)} \]
    6. unpow242.4%

      \[\leadsto \sqrt{0.5 \cdot \left(re + \sqrt{{re}^{2} + \color{blue}{{im}^{2}}}\right)} \]
    7. +-commutative42.4%

      \[\leadsto \sqrt{0.5 \cdot \left(re + \sqrt{\color{blue}{{im}^{2} + {re}^{2}}}\right)} \]
    8. unpow242.4%

      \[\leadsto \sqrt{0.5 \cdot \left(re + \sqrt{\color{blue}{im \cdot im} + {re}^{2}}\right)} \]
    9. unpow242.4%

      \[\leadsto \sqrt{0.5 \cdot \left(re + \sqrt{im \cdot im + \color{blue}{re \cdot re}}\right)} \]
    10. hypot-undefine79.9%

      \[\leadsto \sqrt{0.5 \cdot \left(re + \color{blue}{\mathsf{hypot}\left(im, re\right)}\right)} \]
  8. Simplified79.9%

    \[\leadsto \color{blue}{\sqrt{0.5 \cdot \left(re + \mathsf{hypot}\left(im, re\right)\right)}} \]
  9. Final simplification79.9%

    \[\leadsto \sqrt{0.5 \cdot \left(re + \mathsf{hypot}\left(im, re\right)\right)} \]
  10. Add Preprocessing

Alternative 4: 60.5% accurate, 1.8× speedup?

\[\begin{array}{l} im_m = \left|im\right| \\ \begin{array}{l} \mathbf{if}\;re \leq 1.65 \cdot 10^{-106}:\\ \;\;\;\;\sqrt{im\_m \cdot 0.5}\\ \mathbf{elif}\;re \leq 4.5 \cdot 10^{+107} \lor \neg \left(re \leq 7 \cdot 10^{+173}\right):\\ \;\;\;\;\sqrt{re}\\ \mathbf{else}:\\ \;\;\;\;\sqrt{0.5 \cdot \left(re + im\_m\right)}\\ \end{array} \end{array} \]
im_m = (fabs.f64 im)
(FPCore (re im_m)
 :precision binary64
 (if (<= re 1.65e-106)
   (sqrt (* im_m 0.5))
   (if (or (<= re 4.5e+107) (not (<= re 7e+173)))
     (sqrt re)
     (sqrt (* 0.5 (+ re im_m))))))
im_m = fabs(im);
double code(double re, double im_m) {
	double tmp;
	if (re <= 1.65e-106) {
		tmp = sqrt((im_m * 0.5));
	} else if ((re <= 4.5e+107) || !(re <= 7e+173)) {
		tmp = sqrt(re);
	} else {
		tmp = sqrt((0.5 * (re + im_m)));
	}
	return tmp;
}
im_m = abs(im)
real(8) function code(re, im_m)
    real(8), intent (in) :: re
    real(8), intent (in) :: im_m
    real(8) :: tmp
    if (re <= 1.65d-106) then
        tmp = sqrt((im_m * 0.5d0))
    else if ((re <= 4.5d+107) .or. (.not. (re <= 7d+173))) then
        tmp = sqrt(re)
    else
        tmp = sqrt((0.5d0 * (re + im_m)))
    end if
    code = tmp
end function
im_m = Math.abs(im);
public static double code(double re, double im_m) {
	double tmp;
	if (re <= 1.65e-106) {
		tmp = Math.sqrt((im_m * 0.5));
	} else if ((re <= 4.5e+107) || !(re <= 7e+173)) {
		tmp = Math.sqrt(re);
	} else {
		tmp = Math.sqrt((0.5 * (re + im_m)));
	}
	return tmp;
}
im_m = math.fabs(im)
def code(re, im_m):
	tmp = 0
	if re <= 1.65e-106:
		tmp = math.sqrt((im_m * 0.5))
	elif (re <= 4.5e+107) or not (re <= 7e+173):
		tmp = math.sqrt(re)
	else:
		tmp = math.sqrt((0.5 * (re + im_m)))
	return tmp
im_m = abs(im)
function code(re, im_m)
	tmp = 0.0
	if (re <= 1.65e-106)
		tmp = sqrt(Float64(im_m * 0.5));
	elseif ((re <= 4.5e+107) || !(re <= 7e+173))
		tmp = sqrt(re);
	else
		tmp = sqrt(Float64(0.5 * Float64(re + im_m)));
	end
	return tmp
end
im_m = abs(im);
function tmp_2 = code(re, im_m)
	tmp = 0.0;
	if (re <= 1.65e-106)
		tmp = sqrt((im_m * 0.5));
	elseif ((re <= 4.5e+107) || ~((re <= 7e+173)))
		tmp = sqrt(re);
	else
		tmp = sqrt((0.5 * (re + im_m)));
	end
	tmp_2 = tmp;
end
im_m = N[Abs[im], $MachinePrecision]
code[re_, im$95$m_] := If[LessEqual[re, 1.65e-106], N[Sqrt[N[(im$95$m * 0.5), $MachinePrecision]], $MachinePrecision], If[Or[LessEqual[re, 4.5e+107], N[Not[LessEqual[re, 7e+173]], $MachinePrecision]], N[Sqrt[re], $MachinePrecision], N[Sqrt[N[(0.5 * N[(re + im$95$m), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]]]
\begin{array}{l}
im_m = \left|im\right|

\\
\begin{array}{l}
\mathbf{if}\;re \leq 1.65 \cdot 10^{-106}:\\
\;\;\;\;\sqrt{im\_m \cdot 0.5}\\

\mathbf{elif}\;re \leq 4.5 \cdot 10^{+107} \lor \neg \left(re \leq 7 \cdot 10^{+173}\right):\\
\;\;\;\;\sqrt{re}\\

\mathbf{else}:\\
\;\;\;\;\sqrt{0.5 \cdot \left(re + im\_m\right)}\\


\end{array}
\end{array}
Derivation
  1. Split input into 3 regimes
  2. if re < 1.65000000000000008e-106

    1. Initial program 39.4%

      \[0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)} \]
    2. Step-by-step derivation
      1. sqr-neg39.4%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + \color{blue}{\left(-im\right) \cdot \left(-im\right)}} + re\right)} \]
      2. +-commutative39.4%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \color{blue}{\left(re + \sqrt{re \cdot re + \left(-im\right) \cdot \left(-im\right)}\right)}} \]
      3. sqr-neg39.4%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \sqrt{re \cdot re + \color{blue}{im \cdot im}}\right)} \]
      4. +-commutative39.4%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \sqrt{\color{blue}{im \cdot im + re \cdot re}}\right)} \]
      5. distribute-rgt-in39.4%

        \[\leadsto 0.5 \cdot \sqrt{\color{blue}{re \cdot 2 + \sqrt{im \cdot im + re \cdot re} \cdot 2}} \]
      6. cancel-sign-sub39.4%

        \[\leadsto 0.5 \cdot \sqrt{\color{blue}{re \cdot 2 - \left(-\sqrt{im \cdot im + re \cdot re}\right) \cdot 2}} \]
      7. distribute-rgt-out--39.4%

        \[\leadsto 0.5 \cdot \sqrt{\color{blue}{2 \cdot \left(re - \left(-\sqrt{im \cdot im + re \cdot re}\right)\right)}} \]
      8. sub-neg39.4%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \color{blue}{\left(re + \left(-\left(-\sqrt{im \cdot im + re \cdot re}\right)\right)\right)}} \]
      9. remove-double-neg39.4%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \color{blue}{\sqrt{im \cdot im + re \cdot re}}\right)} \]
      10. +-commutative39.4%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \sqrt{\color{blue}{re \cdot re + im \cdot im}}\right)} \]
      11. hypot-define70.4%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \color{blue}{\mathsf{hypot}\left(re, im\right)}\right)} \]
    3. Simplified70.4%

      \[\leadsto \color{blue}{0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}} \]
    4. Add Preprocessing
    5. Step-by-step derivation
      1. add-sqr-sqrt70.0%

        \[\leadsto \color{blue}{\sqrt{0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}} \cdot \sqrt{0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}}} \]
      2. sqrt-unprod70.4%

        \[\leadsto \color{blue}{\sqrt{\left(0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}\right) \cdot \left(0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}\right)}} \]
      3. *-commutative70.4%

        \[\leadsto \sqrt{\color{blue}{\left(\sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)} \cdot 0.5\right)} \cdot \left(0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}\right)} \]
      4. *-commutative70.4%

        \[\leadsto \sqrt{\left(\sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)} \cdot 0.5\right) \cdot \color{blue}{\left(\sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)} \cdot 0.5\right)}} \]
      5. swap-sqr70.4%

        \[\leadsto \sqrt{\color{blue}{\left(\sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)} \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}\right) \cdot \left(0.5 \cdot 0.5\right)}} \]
      6. add-sqr-sqrt70.4%

        \[\leadsto \sqrt{\color{blue}{\left(2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)\right)} \cdot \left(0.5 \cdot 0.5\right)} \]
      7. metadata-eval70.4%

        \[\leadsto \sqrt{\left(2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)\right) \cdot \color{blue}{0.25}} \]
    6. Applied egg-rr70.4%

      \[\leadsto \color{blue}{\sqrt{\left(2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)\right) \cdot 0.25}} \]
    7. Step-by-step derivation
      1. *-commutative70.4%

        \[\leadsto \sqrt{\color{blue}{0.25 \cdot \left(2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)\right)}} \]
      2. associate-*r*70.4%

        \[\leadsto \sqrt{\color{blue}{\left(0.25 \cdot 2\right) \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}} \]
      3. metadata-eval70.4%

        \[\leadsto \sqrt{\color{blue}{0.5} \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)} \]
      4. hypot-undefine39.4%

        \[\leadsto \sqrt{0.5 \cdot \left(re + \color{blue}{\sqrt{re \cdot re + im \cdot im}}\right)} \]
      5. unpow239.4%

        \[\leadsto \sqrt{0.5 \cdot \left(re + \sqrt{\color{blue}{{re}^{2}} + im \cdot im}\right)} \]
      6. unpow239.4%

        \[\leadsto \sqrt{0.5 \cdot \left(re + \sqrt{{re}^{2} + \color{blue}{{im}^{2}}}\right)} \]
      7. +-commutative39.4%

        \[\leadsto \sqrt{0.5 \cdot \left(re + \sqrt{\color{blue}{{im}^{2} + {re}^{2}}}\right)} \]
      8. unpow239.4%

        \[\leadsto \sqrt{0.5 \cdot \left(re + \sqrt{\color{blue}{im \cdot im} + {re}^{2}}\right)} \]
      9. unpow239.4%

        \[\leadsto \sqrt{0.5 \cdot \left(re + \sqrt{im \cdot im + \color{blue}{re \cdot re}}\right)} \]
      10. hypot-undefine70.4%

        \[\leadsto \sqrt{0.5 \cdot \left(re + \color{blue}{\mathsf{hypot}\left(im, re\right)}\right)} \]
    8. Simplified70.4%

      \[\leadsto \color{blue}{\sqrt{0.5 \cdot \left(re + \mathsf{hypot}\left(im, re\right)\right)}} \]
    9. Taylor expanded in re around 0 33.4%

      \[\leadsto \sqrt{0.5 \cdot \color{blue}{im}} \]

    if 1.65000000000000008e-106 < re < 4.5e107 or 6.9999999999999998e173 < re

    1. Initial program 52.1%

      \[0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)} \]
    2. Step-by-step derivation
      1. sqr-neg52.1%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + \color{blue}{\left(-im\right) \cdot \left(-im\right)}} + re\right)} \]
      2. +-commutative52.1%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \color{blue}{\left(re + \sqrt{re \cdot re + \left(-im\right) \cdot \left(-im\right)}\right)}} \]
      3. sqr-neg52.1%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \sqrt{re \cdot re + \color{blue}{im \cdot im}}\right)} \]
      4. +-commutative52.1%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \sqrt{\color{blue}{im \cdot im + re \cdot re}}\right)} \]
      5. distribute-rgt-in52.1%

        \[\leadsto 0.5 \cdot \sqrt{\color{blue}{re \cdot 2 + \sqrt{im \cdot im + re \cdot re} \cdot 2}} \]
      6. cancel-sign-sub52.1%

        \[\leadsto 0.5 \cdot \sqrt{\color{blue}{re \cdot 2 - \left(-\sqrt{im \cdot im + re \cdot re}\right) \cdot 2}} \]
      7. distribute-rgt-out--52.1%

        \[\leadsto 0.5 \cdot \sqrt{\color{blue}{2 \cdot \left(re - \left(-\sqrt{im \cdot im + re \cdot re}\right)\right)}} \]
      8. sub-neg52.1%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \color{blue}{\left(re + \left(-\left(-\sqrt{im \cdot im + re \cdot re}\right)\right)\right)}} \]
      9. remove-double-neg52.1%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \color{blue}{\sqrt{im \cdot im + re \cdot re}}\right)} \]
      10. +-commutative52.1%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \sqrt{\color{blue}{re \cdot re + im \cdot im}}\right)} \]
      11. hypot-define98.7%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \color{blue}{\mathsf{hypot}\left(re, im\right)}\right)} \]
    3. Simplified98.7%

      \[\leadsto \color{blue}{0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}} \]
    4. Add Preprocessing
    5. Step-by-step derivation
      1. add-sqr-sqrt97.7%

        \[\leadsto \color{blue}{\sqrt{0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}} \cdot \sqrt{0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}}} \]
      2. sqrt-unprod98.7%

        \[\leadsto \color{blue}{\sqrt{\left(0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}\right) \cdot \left(0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}\right)}} \]
      3. *-commutative98.7%

        \[\leadsto \sqrt{\color{blue}{\left(\sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)} \cdot 0.5\right)} \cdot \left(0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}\right)} \]
      4. *-commutative98.7%

        \[\leadsto \sqrt{\left(\sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)} \cdot 0.5\right) \cdot \color{blue}{\left(\sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)} \cdot 0.5\right)}} \]
      5. swap-sqr98.7%

        \[\leadsto \sqrt{\color{blue}{\left(\sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)} \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}\right) \cdot \left(0.5 \cdot 0.5\right)}} \]
      6. add-sqr-sqrt98.7%

        \[\leadsto \sqrt{\color{blue}{\left(2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)\right)} \cdot \left(0.5 \cdot 0.5\right)} \]
      7. metadata-eval98.7%

        \[\leadsto \sqrt{\left(2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)\right) \cdot \color{blue}{0.25}} \]
    6. Applied egg-rr98.7%

      \[\leadsto \color{blue}{\sqrt{\left(2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)\right) \cdot 0.25}} \]
    7. Step-by-step derivation
      1. *-commutative98.7%

        \[\leadsto \sqrt{\color{blue}{0.25 \cdot \left(2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)\right)}} \]
      2. associate-*r*100.0%

        \[\leadsto \sqrt{\color{blue}{\left(0.25 \cdot 2\right) \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}} \]
      3. metadata-eval100.0%

        \[\leadsto \sqrt{\color{blue}{0.5} \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)} \]
      4. hypot-undefine52.1%

        \[\leadsto \sqrt{0.5 \cdot \left(re + \color{blue}{\sqrt{re \cdot re + im \cdot im}}\right)} \]
      5. unpow252.1%

        \[\leadsto \sqrt{0.5 \cdot \left(re + \sqrt{\color{blue}{{re}^{2}} + im \cdot im}\right)} \]
      6. unpow252.1%

        \[\leadsto \sqrt{0.5 \cdot \left(re + \sqrt{{re}^{2} + \color{blue}{{im}^{2}}}\right)} \]
      7. +-commutative52.1%

        \[\leadsto \sqrt{0.5 \cdot \left(re + \sqrt{\color{blue}{{im}^{2} + {re}^{2}}}\right)} \]
      8. unpow252.1%

        \[\leadsto \sqrt{0.5 \cdot \left(re + \sqrt{\color{blue}{im \cdot im} + {re}^{2}}\right)} \]
      9. unpow252.1%

        \[\leadsto \sqrt{0.5 \cdot \left(re + \sqrt{im \cdot im + \color{blue}{re \cdot re}}\right)} \]
      10. hypot-undefine100.0%

        \[\leadsto \sqrt{0.5 \cdot \left(re + \color{blue}{\mathsf{hypot}\left(im, re\right)}\right)} \]
    8. Simplified100.0%

      \[\leadsto \color{blue}{\sqrt{0.5 \cdot \left(re + \mathsf{hypot}\left(im, re\right)\right)}} \]
    9. Step-by-step derivation
      1. *-commutative100.0%

        \[\leadsto \sqrt{\color{blue}{\left(re + \mathsf{hypot}\left(im, re\right)\right) \cdot 0.5}} \]
      2. sqrt-prod99.2%

        \[\leadsto \color{blue}{\sqrt{re + \mathsf{hypot}\left(im, re\right)} \cdot \sqrt{0.5}} \]
      3. *-un-lft-identity99.2%

        \[\leadsto \sqrt{\color{blue}{1 \cdot \left(re + \mathsf{hypot}\left(im, re\right)\right)}} \cdot \sqrt{0.5} \]
      4. *-un-lft-identity99.2%

        \[\leadsto \sqrt{\color{blue}{re + \mathsf{hypot}\left(im, re\right)}} \cdot \sqrt{0.5} \]
      5. hypot-undefine51.7%

        \[\leadsto \sqrt{re + \color{blue}{\sqrt{im \cdot im + re \cdot re}}} \cdot \sqrt{0.5} \]
      6. +-commutative51.7%

        \[\leadsto \sqrt{re + \sqrt{\color{blue}{re \cdot re + im \cdot im}}} \cdot \sqrt{0.5} \]
      7. hypot-undefine99.2%

        \[\leadsto \sqrt{re + \color{blue}{\mathsf{hypot}\left(re, im\right)}} \cdot \sqrt{0.5} \]
    10. Applied egg-rr99.2%

      \[\leadsto \color{blue}{\sqrt{re + \mathsf{hypot}\left(re, im\right)} \cdot \sqrt{0.5}} \]
    11. Step-by-step derivation
      1. *-commutative99.2%

        \[\leadsto \color{blue}{\sqrt{0.5} \cdot \sqrt{re + \mathsf{hypot}\left(re, im\right)}} \]
      2. sqrt-prod100.0%

        \[\leadsto \color{blue}{\sqrt{0.5 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}} \]
      3. add-sqr-sqrt99.1%

        \[\leadsto \color{blue}{\sqrt{\sqrt{0.5 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}} \cdot \sqrt{\sqrt{0.5 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}}} \]
      4. pow299.1%

        \[\leadsto \color{blue}{{\left(\sqrt{\sqrt{0.5 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}}\right)}^{2}} \]
      5. pow1/299.1%

        \[\leadsto {\left(\sqrt{\color{blue}{{\left(0.5 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)\right)}^{0.5}}}\right)}^{2} \]
      6. sqrt-pow199.0%

        \[\leadsto {\color{blue}{\left({\left(0.5 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)\right)}^{\left(\frac{0.5}{2}\right)}\right)}}^{2} \]
      7. *-commutative99.0%

        \[\leadsto {\left({\color{blue}{\left(\left(re + \mathsf{hypot}\left(re, im\right)\right) \cdot 0.5\right)}}^{\left(\frac{0.5}{2}\right)}\right)}^{2} \]
      8. metadata-eval99.0%

        \[\leadsto {\left({\left(\left(re + \mathsf{hypot}\left(re, im\right)\right) \cdot 0.5\right)}^{\color{blue}{0.25}}\right)}^{2} \]
    12. Applied egg-rr99.0%

      \[\leadsto \color{blue}{{\left({\left(\left(re + \mathsf{hypot}\left(re, im\right)\right) \cdot 0.5\right)}^{0.25}\right)}^{2}} \]
    13. Taylor expanded in re around inf 77.4%

      \[\leadsto \color{blue}{\sqrt{re}} \]

    if 4.5e107 < re < 6.9999999999999998e173

    1. Initial program 23.2%

      \[0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)} \]
    2. Step-by-step derivation
      1. sqr-neg23.2%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + \color{blue}{\left(-im\right) \cdot \left(-im\right)}} + re\right)} \]
      2. +-commutative23.2%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \color{blue}{\left(re + \sqrt{re \cdot re + \left(-im\right) \cdot \left(-im\right)}\right)}} \]
      3. sqr-neg23.2%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \sqrt{re \cdot re + \color{blue}{im \cdot im}}\right)} \]
      4. +-commutative23.2%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \sqrt{\color{blue}{im \cdot im + re \cdot re}}\right)} \]
      5. distribute-rgt-in23.2%

        \[\leadsto 0.5 \cdot \sqrt{\color{blue}{re \cdot 2 + \sqrt{im \cdot im + re \cdot re} \cdot 2}} \]
      6. cancel-sign-sub23.2%

        \[\leadsto 0.5 \cdot \sqrt{\color{blue}{re \cdot 2 - \left(-\sqrt{im \cdot im + re \cdot re}\right) \cdot 2}} \]
      7. distribute-rgt-out--23.2%

        \[\leadsto 0.5 \cdot \sqrt{\color{blue}{2 \cdot \left(re - \left(-\sqrt{im \cdot im + re \cdot re}\right)\right)}} \]
      8. sub-neg23.2%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \color{blue}{\left(re + \left(-\left(-\sqrt{im \cdot im + re \cdot re}\right)\right)\right)}} \]
      9. remove-double-neg23.2%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \color{blue}{\sqrt{im \cdot im + re \cdot re}}\right)} \]
      10. +-commutative23.2%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \sqrt{\color{blue}{re \cdot re + im \cdot im}}\right)} \]
      11. hypot-define100.0%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \color{blue}{\mathsf{hypot}\left(re, im\right)}\right)} \]
    3. Simplified100.0%

      \[\leadsto \color{blue}{0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}} \]
    4. Add Preprocessing
    5. Step-by-step derivation
      1. add-sqr-sqrt99.1%

        \[\leadsto \color{blue}{\sqrt{0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}} \cdot \sqrt{0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}}} \]
      2. sqrt-unprod100.0%

        \[\leadsto \color{blue}{\sqrt{\left(0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}\right) \cdot \left(0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}\right)}} \]
      3. *-commutative100.0%

        \[\leadsto \sqrt{\color{blue}{\left(\sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)} \cdot 0.5\right)} \cdot \left(0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}\right)} \]
      4. *-commutative100.0%

        \[\leadsto \sqrt{\left(\sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)} \cdot 0.5\right) \cdot \color{blue}{\left(\sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)} \cdot 0.5\right)}} \]
      5. swap-sqr100.0%

        \[\leadsto \sqrt{\color{blue}{\left(\sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)} \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}\right) \cdot \left(0.5 \cdot 0.5\right)}} \]
      6. add-sqr-sqrt100.0%

        \[\leadsto \sqrt{\color{blue}{\left(2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)\right)} \cdot \left(0.5 \cdot 0.5\right)} \]
      7. metadata-eval100.0%

        \[\leadsto \sqrt{\left(2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)\right) \cdot \color{blue}{0.25}} \]
    6. Applied egg-rr100.0%

      \[\leadsto \color{blue}{\sqrt{\left(2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)\right) \cdot 0.25}} \]
    7. Step-by-step derivation
      1. *-commutative100.0%

        \[\leadsto \sqrt{\color{blue}{0.25 \cdot \left(2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)\right)}} \]
      2. associate-*r*100.0%

        \[\leadsto \sqrt{\color{blue}{\left(0.25 \cdot 2\right) \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}} \]
      3. metadata-eval100.0%

        \[\leadsto \sqrt{\color{blue}{0.5} \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)} \]
      4. hypot-undefine23.2%

        \[\leadsto \sqrt{0.5 \cdot \left(re + \color{blue}{\sqrt{re \cdot re + im \cdot im}}\right)} \]
      5. unpow223.2%

        \[\leadsto \sqrt{0.5 \cdot \left(re + \sqrt{\color{blue}{{re}^{2}} + im \cdot im}\right)} \]
      6. unpow223.2%

        \[\leadsto \sqrt{0.5 \cdot \left(re + \sqrt{{re}^{2} + \color{blue}{{im}^{2}}}\right)} \]
      7. +-commutative23.2%

        \[\leadsto \sqrt{0.5 \cdot \left(re + \sqrt{\color{blue}{{im}^{2} + {re}^{2}}}\right)} \]
      8. unpow223.2%

        \[\leadsto \sqrt{0.5 \cdot \left(re + \sqrt{\color{blue}{im \cdot im} + {re}^{2}}\right)} \]
      9. unpow223.2%

        \[\leadsto \sqrt{0.5 \cdot \left(re + \sqrt{im \cdot im + \color{blue}{re \cdot re}}\right)} \]
      10. hypot-undefine100.0%

        \[\leadsto \sqrt{0.5 \cdot \left(re + \color{blue}{\mathsf{hypot}\left(im, re\right)}\right)} \]
    8. Simplified100.0%

      \[\leadsto \color{blue}{\sqrt{0.5 \cdot \left(re + \mathsf{hypot}\left(im, re\right)\right)}} \]
    9. Taylor expanded in re around 0 76.1%

      \[\leadsto \sqrt{0.5 \cdot \color{blue}{\left(im + re\right)}} \]
  3. Recombined 3 regimes into one program.
  4. Final simplification47.4%

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \leq 1.65 \cdot 10^{-106}:\\ \;\;\;\;\sqrt{im \cdot 0.5}\\ \mathbf{elif}\;re \leq 4.5 \cdot 10^{+107} \lor \neg \left(re \leq 7 \cdot 10^{+173}\right):\\ \;\;\;\;\sqrt{re}\\ \mathbf{else}:\\ \;\;\;\;\sqrt{0.5 \cdot \left(re + im\right)}\\ \end{array} \]
  5. Add Preprocessing

Alternative 5: 62.5% accurate, 2.0× speedup?

\[\begin{array}{l} im_m = \left|im\right| \\ \begin{array}{l} \mathbf{if}\;re \leq 1.65 \cdot 10^{-106}:\\ \;\;\;\;\sqrt{im\_m \cdot 0.5}\\ \mathbf{else}:\\ \;\;\;\;\sqrt{re}\\ \end{array} \end{array} \]
im_m = (fabs.f64 im)
(FPCore (re im_m)
 :precision binary64
 (if (<= re 1.65e-106) (sqrt (* im_m 0.5)) (sqrt re)))
im_m = fabs(im);
double code(double re, double im_m) {
	double tmp;
	if (re <= 1.65e-106) {
		tmp = sqrt((im_m * 0.5));
	} else {
		tmp = sqrt(re);
	}
	return tmp;
}
im_m = abs(im)
real(8) function code(re, im_m)
    real(8), intent (in) :: re
    real(8), intent (in) :: im_m
    real(8) :: tmp
    if (re <= 1.65d-106) then
        tmp = sqrt((im_m * 0.5d0))
    else
        tmp = sqrt(re)
    end if
    code = tmp
end function
im_m = Math.abs(im);
public static double code(double re, double im_m) {
	double tmp;
	if (re <= 1.65e-106) {
		tmp = Math.sqrt((im_m * 0.5));
	} else {
		tmp = Math.sqrt(re);
	}
	return tmp;
}
im_m = math.fabs(im)
def code(re, im_m):
	tmp = 0
	if re <= 1.65e-106:
		tmp = math.sqrt((im_m * 0.5))
	else:
		tmp = math.sqrt(re)
	return tmp
im_m = abs(im)
function code(re, im_m)
	tmp = 0.0
	if (re <= 1.65e-106)
		tmp = sqrt(Float64(im_m * 0.5));
	else
		tmp = sqrt(re);
	end
	return tmp
end
im_m = abs(im);
function tmp_2 = code(re, im_m)
	tmp = 0.0;
	if (re <= 1.65e-106)
		tmp = sqrt((im_m * 0.5));
	else
		tmp = sqrt(re);
	end
	tmp_2 = tmp;
end
im_m = N[Abs[im], $MachinePrecision]
code[re_, im$95$m_] := If[LessEqual[re, 1.65e-106], N[Sqrt[N[(im$95$m * 0.5), $MachinePrecision]], $MachinePrecision], N[Sqrt[re], $MachinePrecision]]
\begin{array}{l}
im_m = \left|im\right|

\\
\begin{array}{l}
\mathbf{if}\;re \leq 1.65 \cdot 10^{-106}:\\
\;\;\;\;\sqrt{im\_m \cdot 0.5}\\

\mathbf{else}:\\
\;\;\;\;\sqrt{re}\\


\end{array}
\end{array}
Derivation
  1. Split input into 2 regimes
  2. if re < 1.65000000000000008e-106

    1. Initial program 39.4%

      \[0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)} \]
    2. Step-by-step derivation
      1. sqr-neg39.4%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + \color{blue}{\left(-im\right) \cdot \left(-im\right)}} + re\right)} \]
      2. +-commutative39.4%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \color{blue}{\left(re + \sqrt{re \cdot re + \left(-im\right) \cdot \left(-im\right)}\right)}} \]
      3. sqr-neg39.4%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \sqrt{re \cdot re + \color{blue}{im \cdot im}}\right)} \]
      4. +-commutative39.4%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \sqrt{\color{blue}{im \cdot im + re \cdot re}}\right)} \]
      5. distribute-rgt-in39.4%

        \[\leadsto 0.5 \cdot \sqrt{\color{blue}{re \cdot 2 + \sqrt{im \cdot im + re \cdot re} \cdot 2}} \]
      6. cancel-sign-sub39.4%

        \[\leadsto 0.5 \cdot \sqrt{\color{blue}{re \cdot 2 - \left(-\sqrt{im \cdot im + re \cdot re}\right) \cdot 2}} \]
      7. distribute-rgt-out--39.4%

        \[\leadsto 0.5 \cdot \sqrt{\color{blue}{2 \cdot \left(re - \left(-\sqrt{im \cdot im + re \cdot re}\right)\right)}} \]
      8. sub-neg39.4%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \color{blue}{\left(re + \left(-\left(-\sqrt{im \cdot im + re \cdot re}\right)\right)\right)}} \]
      9. remove-double-neg39.4%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \color{blue}{\sqrt{im \cdot im + re \cdot re}}\right)} \]
      10. +-commutative39.4%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \sqrt{\color{blue}{re \cdot re + im \cdot im}}\right)} \]
      11. hypot-define70.4%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \color{blue}{\mathsf{hypot}\left(re, im\right)}\right)} \]
    3. Simplified70.4%

      \[\leadsto \color{blue}{0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}} \]
    4. Add Preprocessing
    5. Step-by-step derivation
      1. add-sqr-sqrt70.0%

        \[\leadsto \color{blue}{\sqrt{0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}} \cdot \sqrt{0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}}} \]
      2. sqrt-unprod70.4%

        \[\leadsto \color{blue}{\sqrt{\left(0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}\right) \cdot \left(0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}\right)}} \]
      3. *-commutative70.4%

        \[\leadsto \sqrt{\color{blue}{\left(\sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)} \cdot 0.5\right)} \cdot \left(0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}\right)} \]
      4. *-commutative70.4%

        \[\leadsto \sqrt{\left(\sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)} \cdot 0.5\right) \cdot \color{blue}{\left(\sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)} \cdot 0.5\right)}} \]
      5. swap-sqr70.4%

        \[\leadsto \sqrt{\color{blue}{\left(\sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)} \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}\right) \cdot \left(0.5 \cdot 0.5\right)}} \]
      6. add-sqr-sqrt70.4%

        \[\leadsto \sqrt{\color{blue}{\left(2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)\right)} \cdot \left(0.5 \cdot 0.5\right)} \]
      7. metadata-eval70.4%

        \[\leadsto \sqrt{\left(2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)\right) \cdot \color{blue}{0.25}} \]
    6. Applied egg-rr70.4%

      \[\leadsto \color{blue}{\sqrt{\left(2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)\right) \cdot 0.25}} \]
    7. Step-by-step derivation
      1. *-commutative70.4%

        \[\leadsto \sqrt{\color{blue}{0.25 \cdot \left(2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)\right)}} \]
      2. associate-*r*70.4%

        \[\leadsto \sqrt{\color{blue}{\left(0.25 \cdot 2\right) \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}} \]
      3. metadata-eval70.4%

        \[\leadsto \sqrt{\color{blue}{0.5} \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)} \]
      4. hypot-undefine39.4%

        \[\leadsto \sqrt{0.5 \cdot \left(re + \color{blue}{\sqrt{re \cdot re + im \cdot im}}\right)} \]
      5. unpow239.4%

        \[\leadsto \sqrt{0.5 \cdot \left(re + \sqrt{\color{blue}{{re}^{2}} + im \cdot im}\right)} \]
      6. unpow239.4%

        \[\leadsto \sqrt{0.5 \cdot \left(re + \sqrt{{re}^{2} + \color{blue}{{im}^{2}}}\right)} \]
      7. +-commutative39.4%

        \[\leadsto \sqrt{0.5 \cdot \left(re + \sqrt{\color{blue}{{im}^{2} + {re}^{2}}}\right)} \]
      8. unpow239.4%

        \[\leadsto \sqrt{0.5 \cdot \left(re + \sqrt{\color{blue}{im \cdot im} + {re}^{2}}\right)} \]
      9. unpow239.4%

        \[\leadsto \sqrt{0.5 \cdot \left(re + \sqrt{im \cdot im + \color{blue}{re \cdot re}}\right)} \]
      10. hypot-undefine70.4%

        \[\leadsto \sqrt{0.5 \cdot \left(re + \color{blue}{\mathsf{hypot}\left(im, re\right)}\right)} \]
    8. Simplified70.4%

      \[\leadsto \color{blue}{\sqrt{0.5 \cdot \left(re + \mathsf{hypot}\left(im, re\right)\right)}} \]
    9. Taylor expanded in re around 0 33.4%

      \[\leadsto \sqrt{0.5 \cdot \color{blue}{im}} \]

    if 1.65000000000000008e-106 < re

    1. Initial program 48.6%

      \[0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)} \]
    2. Step-by-step derivation
      1. sqr-neg48.6%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + \color{blue}{\left(-im\right) \cdot \left(-im\right)}} + re\right)} \]
      2. +-commutative48.6%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \color{blue}{\left(re + \sqrt{re \cdot re + \left(-im\right) \cdot \left(-im\right)}\right)}} \]
      3. sqr-neg48.6%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \sqrt{re \cdot re + \color{blue}{im \cdot im}}\right)} \]
      4. +-commutative48.6%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \sqrt{\color{blue}{im \cdot im + re \cdot re}}\right)} \]
      5. distribute-rgt-in48.6%

        \[\leadsto 0.5 \cdot \sqrt{\color{blue}{re \cdot 2 + \sqrt{im \cdot im + re \cdot re} \cdot 2}} \]
      6. cancel-sign-sub48.6%

        \[\leadsto 0.5 \cdot \sqrt{\color{blue}{re \cdot 2 - \left(-\sqrt{im \cdot im + re \cdot re}\right) \cdot 2}} \]
      7. distribute-rgt-out--48.6%

        \[\leadsto 0.5 \cdot \sqrt{\color{blue}{2 \cdot \left(re - \left(-\sqrt{im \cdot im + re \cdot re}\right)\right)}} \]
      8. sub-neg48.6%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \color{blue}{\left(re + \left(-\left(-\sqrt{im \cdot im + re \cdot re}\right)\right)\right)}} \]
      9. remove-double-neg48.6%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \color{blue}{\sqrt{im \cdot im + re \cdot re}}\right)} \]
      10. +-commutative48.6%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \sqrt{\color{blue}{re \cdot re + im \cdot im}}\right)} \]
      11. hypot-define98.8%

        \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \color{blue}{\mathsf{hypot}\left(re, im\right)}\right)} \]
    3. Simplified98.8%

      \[\leadsto \color{blue}{0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}} \]
    4. Add Preprocessing
    5. Step-by-step derivation
      1. add-sqr-sqrt97.9%

        \[\leadsto \color{blue}{\sqrt{0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}} \cdot \sqrt{0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}}} \]
      2. sqrt-unprod98.8%

        \[\leadsto \color{blue}{\sqrt{\left(0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}\right) \cdot \left(0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}\right)}} \]
      3. *-commutative98.8%

        \[\leadsto \sqrt{\color{blue}{\left(\sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)} \cdot 0.5\right)} \cdot \left(0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}\right)} \]
      4. *-commutative98.8%

        \[\leadsto \sqrt{\left(\sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)} \cdot 0.5\right) \cdot \color{blue}{\left(\sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)} \cdot 0.5\right)}} \]
      5. swap-sqr98.8%

        \[\leadsto \sqrt{\color{blue}{\left(\sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)} \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}\right) \cdot \left(0.5 \cdot 0.5\right)}} \]
      6. add-sqr-sqrt98.8%

        \[\leadsto \sqrt{\color{blue}{\left(2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)\right)} \cdot \left(0.5 \cdot 0.5\right)} \]
      7. metadata-eval98.8%

        \[\leadsto \sqrt{\left(2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)\right) \cdot \color{blue}{0.25}} \]
    6. Applied egg-rr98.8%

      \[\leadsto \color{blue}{\sqrt{\left(2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)\right) \cdot 0.25}} \]
    7. Step-by-step derivation
      1. *-commutative98.8%

        \[\leadsto \sqrt{\color{blue}{0.25 \cdot \left(2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)\right)}} \]
      2. associate-*r*100.0%

        \[\leadsto \sqrt{\color{blue}{\left(0.25 \cdot 2\right) \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}} \]
      3. metadata-eval100.0%

        \[\leadsto \sqrt{\color{blue}{0.5} \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)} \]
      4. hypot-undefine48.6%

        \[\leadsto \sqrt{0.5 \cdot \left(re + \color{blue}{\sqrt{re \cdot re + im \cdot im}}\right)} \]
      5. unpow248.6%

        \[\leadsto \sqrt{0.5 \cdot \left(re + \sqrt{\color{blue}{{re}^{2}} + im \cdot im}\right)} \]
      6. unpow248.6%

        \[\leadsto \sqrt{0.5 \cdot \left(re + \sqrt{{re}^{2} + \color{blue}{{im}^{2}}}\right)} \]
      7. +-commutative48.6%

        \[\leadsto \sqrt{0.5 \cdot \left(re + \sqrt{\color{blue}{{im}^{2} + {re}^{2}}}\right)} \]
      8. unpow248.6%

        \[\leadsto \sqrt{0.5 \cdot \left(re + \sqrt{\color{blue}{im \cdot im} + {re}^{2}}\right)} \]
      9. unpow248.6%

        \[\leadsto \sqrt{0.5 \cdot \left(re + \sqrt{im \cdot im + \color{blue}{re \cdot re}}\right)} \]
      10. hypot-undefine100.0%

        \[\leadsto \sqrt{0.5 \cdot \left(re + \color{blue}{\mathsf{hypot}\left(im, re\right)}\right)} \]
    8. Simplified100.0%

      \[\leadsto \color{blue}{\sqrt{0.5 \cdot \left(re + \mathsf{hypot}\left(im, re\right)\right)}} \]
    9. Step-by-step derivation
      1. *-commutative100.0%

        \[\leadsto \sqrt{\color{blue}{\left(re + \mathsf{hypot}\left(im, re\right)\right) \cdot 0.5}} \]
      2. sqrt-prod99.2%

        \[\leadsto \color{blue}{\sqrt{re + \mathsf{hypot}\left(im, re\right)} \cdot \sqrt{0.5}} \]
      3. *-un-lft-identity99.2%

        \[\leadsto \sqrt{\color{blue}{1 \cdot \left(re + \mathsf{hypot}\left(im, re\right)\right)}} \cdot \sqrt{0.5} \]
      4. *-un-lft-identity99.2%

        \[\leadsto \sqrt{\color{blue}{re + \mathsf{hypot}\left(im, re\right)}} \cdot \sqrt{0.5} \]
      5. hypot-undefine48.2%

        \[\leadsto \sqrt{re + \color{blue}{\sqrt{im \cdot im + re \cdot re}}} \cdot \sqrt{0.5} \]
      6. +-commutative48.2%

        \[\leadsto \sqrt{re + \sqrt{\color{blue}{re \cdot re + im \cdot im}}} \cdot \sqrt{0.5} \]
      7. hypot-undefine99.2%

        \[\leadsto \sqrt{re + \color{blue}{\mathsf{hypot}\left(re, im\right)}} \cdot \sqrt{0.5} \]
    10. Applied egg-rr99.2%

      \[\leadsto \color{blue}{\sqrt{re + \mathsf{hypot}\left(re, im\right)} \cdot \sqrt{0.5}} \]
    11. Step-by-step derivation
      1. *-commutative99.2%

        \[\leadsto \color{blue}{\sqrt{0.5} \cdot \sqrt{re + \mathsf{hypot}\left(re, im\right)}} \]
      2. sqrt-prod100.0%

        \[\leadsto \color{blue}{\sqrt{0.5 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}} \]
      3. add-sqr-sqrt99.1%

        \[\leadsto \color{blue}{\sqrt{\sqrt{0.5 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}} \cdot \sqrt{\sqrt{0.5 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}}} \]
      4. pow299.1%

        \[\leadsto \color{blue}{{\left(\sqrt{\sqrt{0.5 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}}\right)}^{2}} \]
      5. pow1/299.1%

        \[\leadsto {\left(\sqrt{\color{blue}{{\left(0.5 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)\right)}^{0.5}}}\right)}^{2} \]
      6. sqrt-pow199.0%

        \[\leadsto {\color{blue}{\left({\left(0.5 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)\right)}^{\left(\frac{0.5}{2}\right)}\right)}}^{2} \]
      7. *-commutative99.0%

        \[\leadsto {\left({\color{blue}{\left(\left(re + \mathsf{hypot}\left(re, im\right)\right) \cdot 0.5\right)}}^{\left(\frac{0.5}{2}\right)}\right)}^{2} \]
      8. metadata-eval99.0%

        \[\leadsto {\left({\left(\left(re + \mathsf{hypot}\left(re, im\right)\right) \cdot 0.5\right)}^{\color{blue}{0.25}}\right)}^{2} \]
    12. Applied egg-rr99.0%

      \[\leadsto \color{blue}{{\left({\left(\left(re + \mathsf{hypot}\left(re, im\right)\right) \cdot 0.5\right)}^{0.25}\right)}^{2}} \]
    13. Taylor expanded in re around inf 72.3%

      \[\leadsto \color{blue}{\sqrt{re}} \]
  3. Recombined 2 regimes into one program.
  4. Final simplification45.8%

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \leq 1.65 \cdot 10^{-106}:\\ \;\;\;\;\sqrt{im \cdot 0.5}\\ \mathbf{else}:\\ \;\;\;\;\sqrt{re}\\ \end{array} \]
  5. Add Preprocessing

Alternative 6: 26.3% accurate, 2.1× speedup?

\[\begin{array}{l} im_m = \left|im\right| \\ \sqrt{re} \end{array} \]
im_m = (fabs.f64 im)
(FPCore (re im_m) :precision binary64 (sqrt re))
im_m = fabs(im);
double code(double re, double im_m) {
	return sqrt(re);
}
im_m = abs(im)
real(8) function code(re, im_m)
    real(8), intent (in) :: re
    real(8), intent (in) :: im_m
    code = sqrt(re)
end function
im_m = Math.abs(im);
public static double code(double re, double im_m) {
	return Math.sqrt(re);
}
im_m = math.fabs(im)
def code(re, im_m):
	return math.sqrt(re)
im_m = abs(im)
function code(re, im_m)
	return sqrt(re)
end
im_m = abs(im);
function tmp = code(re, im_m)
	tmp = sqrt(re);
end
im_m = N[Abs[im], $MachinePrecision]
code[re_, im$95$m_] := N[Sqrt[re], $MachinePrecision]
\begin{array}{l}
im_m = \left|im\right|

\\
\sqrt{re}
\end{array}
Derivation
  1. Initial program 42.4%

    \[0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)} \]
  2. Step-by-step derivation
    1. sqr-neg42.4%

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + \color{blue}{\left(-im\right) \cdot \left(-im\right)}} + re\right)} \]
    2. +-commutative42.4%

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \color{blue}{\left(re + \sqrt{re \cdot re + \left(-im\right) \cdot \left(-im\right)}\right)}} \]
    3. sqr-neg42.4%

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \sqrt{re \cdot re + \color{blue}{im \cdot im}}\right)} \]
    4. +-commutative42.4%

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \sqrt{\color{blue}{im \cdot im + re \cdot re}}\right)} \]
    5. distribute-rgt-in42.4%

      \[\leadsto 0.5 \cdot \sqrt{\color{blue}{re \cdot 2 + \sqrt{im \cdot im + re \cdot re} \cdot 2}} \]
    6. cancel-sign-sub42.4%

      \[\leadsto 0.5 \cdot \sqrt{\color{blue}{re \cdot 2 - \left(-\sqrt{im \cdot im + re \cdot re}\right) \cdot 2}} \]
    7. distribute-rgt-out--42.4%

      \[\leadsto 0.5 \cdot \sqrt{\color{blue}{2 \cdot \left(re - \left(-\sqrt{im \cdot im + re \cdot re}\right)\right)}} \]
    8. sub-neg42.4%

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \color{blue}{\left(re + \left(-\left(-\sqrt{im \cdot im + re \cdot re}\right)\right)\right)}} \]
    9. remove-double-neg42.4%

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \color{blue}{\sqrt{im \cdot im + re \cdot re}}\right)} \]
    10. +-commutative42.4%

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \sqrt{\color{blue}{re \cdot re + im \cdot im}}\right)} \]
    11. hypot-define79.5%

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(re + \color{blue}{\mathsf{hypot}\left(re, im\right)}\right)} \]
  3. Simplified79.5%

    \[\leadsto \color{blue}{0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}} \]
  4. Add Preprocessing
  5. Step-by-step derivation
    1. add-sqr-sqrt78.9%

      \[\leadsto \color{blue}{\sqrt{0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}} \cdot \sqrt{0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}}} \]
    2. sqrt-unprod79.5%

      \[\leadsto \color{blue}{\sqrt{\left(0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}\right) \cdot \left(0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}\right)}} \]
    3. *-commutative79.5%

      \[\leadsto \sqrt{\color{blue}{\left(\sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)} \cdot 0.5\right)} \cdot \left(0.5 \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}\right)} \]
    4. *-commutative79.5%

      \[\leadsto \sqrt{\left(\sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)} \cdot 0.5\right) \cdot \color{blue}{\left(\sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)} \cdot 0.5\right)}} \]
    5. swap-sqr79.5%

      \[\leadsto \sqrt{\color{blue}{\left(\sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)} \cdot \sqrt{2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}\right) \cdot \left(0.5 \cdot 0.5\right)}} \]
    6. add-sqr-sqrt79.5%

      \[\leadsto \sqrt{\color{blue}{\left(2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)\right)} \cdot \left(0.5 \cdot 0.5\right)} \]
    7. metadata-eval79.5%

      \[\leadsto \sqrt{\left(2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)\right) \cdot \color{blue}{0.25}} \]
  6. Applied egg-rr79.5%

    \[\leadsto \color{blue}{\sqrt{\left(2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)\right) \cdot 0.25}} \]
  7. Step-by-step derivation
    1. *-commutative79.5%

      \[\leadsto \sqrt{\color{blue}{0.25 \cdot \left(2 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)\right)}} \]
    2. associate-*r*79.9%

      \[\leadsto \sqrt{\color{blue}{\left(0.25 \cdot 2\right) \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}} \]
    3. metadata-eval79.9%

      \[\leadsto \sqrt{\color{blue}{0.5} \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)} \]
    4. hypot-undefine42.4%

      \[\leadsto \sqrt{0.5 \cdot \left(re + \color{blue}{\sqrt{re \cdot re + im \cdot im}}\right)} \]
    5. unpow242.4%

      \[\leadsto \sqrt{0.5 \cdot \left(re + \sqrt{\color{blue}{{re}^{2}} + im \cdot im}\right)} \]
    6. unpow242.4%

      \[\leadsto \sqrt{0.5 \cdot \left(re + \sqrt{{re}^{2} + \color{blue}{{im}^{2}}}\right)} \]
    7. +-commutative42.4%

      \[\leadsto \sqrt{0.5 \cdot \left(re + \sqrt{\color{blue}{{im}^{2} + {re}^{2}}}\right)} \]
    8. unpow242.4%

      \[\leadsto \sqrt{0.5 \cdot \left(re + \sqrt{\color{blue}{im \cdot im} + {re}^{2}}\right)} \]
    9. unpow242.4%

      \[\leadsto \sqrt{0.5 \cdot \left(re + \sqrt{im \cdot im + \color{blue}{re \cdot re}}\right)} \]
    10. hypot-undefine79.9%

      \[\leadsto \sqrt{0.5 \cdot \left(re + \color{blue}{\mathsf{hypot}\left(im, re\right)}\right)} \]
  8. Simplified79.9%

    \[\leadsto \color{blue}{\sqrt{0.5 \cdot \left(re + \mathsf{hypot}\left(im, re\right)\right)}} \]
  9. Step-by-step derivation
    1. *-commutative79.9%

      \[\leadsto \sqrt{\color{blue}{\left(re + \mathsf{hypot}\left(im, re\right)\right) \cdot 0.5}} \]
    2. sqrt-prod79.4%

      \[\leadsto \color{blue}{\sqrt{re + \mathsf{hypot}\left(im, re\right)} \cdot \sqrt{0.5}} \]
    3. *-un-lft-identity79.4%

      \[\leadsto \sqrt{\color{blue}{1 \cdot \left(re + \mathsf{hypot}\left(im, re\right)\right)}} \cdot \sqrt{0.5} \]
    4. *-un-lft-identity79.4%

      \[\leadsto \sqrt{\color{blue}{re + \mathsf{hypot}\left(im, re\right)}} \cdot \sqrt{0.5} \]
    5. hypot-undefine42.1%

      \[\leadsto \sqrt{re + \color{blue}{\sqrt{im \cdot im + re \cdot re}}} \cdot \sqrt{0.5} \]
    6. +-commutative42.1%

      \[\leadsto \sqrt{re + \sqrt{\color{blue}{re \cdot re + im \cdot im}}} \cdot \sqrt{0.5} \]
    7. hypot-undefine79.4%

      \[\leadsto \sqrt{re + \color{blue}{\mathsf{hypot}\left(re, im\right)}} \cdot \sqrt{0.5} \]
  10. Applied egg-rr79.4%

    \[\leadsto \color{blue}{\sqrt{re + \mathsf{hypot}\left(re, im\right)} \cdot \sqrt{0.5}} \]
  11. Step-by-step derivation
    1. *-commutative79.4%

      \[\leadsto \color{blue}{\sqrt{0.5} \cdot \sqrt{re + \mathsf{hypot}\left(re, im\right)}} \]
    2. sqrt-prod79.9%

      \[\leadsto \color{blue}{\sqrt{0.5 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}} \]
    3. add-sqr-sqrt79.3%

      \[\leadsto \color{blue}{\sqrt{\sqrt{0.5 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}} \cdot \sqrt{\sqrt{0.5 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}}} \]
    4. pow279.3%

      \[\leadsto \color{blue}{{\left(\sqrt{\sqrt{0.5 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)}}\right)}^{2}} \]
    5. pow1/279.3%

      \[\leadsto {\left(\sqrt{\color{blue}{{\left(0.5 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)\right)}^{0.5}}}\right)}^{2} \]
    6. sqrt-pow179.3%

      \[\leadsto {\color{blue}{\left({\left(0.5 \cdot \left(re + \mathsf{hypot}\left(re, im\right)\right)\right)}^{\left(\frac{0.5}{2}\right)}\right)}}^{2} \]
    7. *-commutative79.3%

      \[\leadsto {\left({\color{blue}{\left(\left(re + \mathsf{hypot}\left(re, im\right)\right) \cdot 0.5\right)}}^{\left(\frac{0.5}{2}\right)}\right)}^{2} \]
    8. metadata-eval79.3%

      \[\leadsto {\left({\left(\left(re + \mathsf{hypot}\left(re, im\right)\right) \cdot 0.5\right)}^{\color{blue}{0.25}}\right)}^{2} \]
  12. Applied egg-rr79.3%

    \[\leadsto \color{blue}{{\left({\left(\left(re + \mathsf{hypot}\left(re, im\right)\right) \cdot 0.5\right)}^{0.25}\right)}^{2}} \]
  13. Taylor expanded in re around inf 27.3%

    \[\leadsto \color{blue}{\sqrt{re}} \]
  14. Final simplification27.3%

    \[\leadsto \sqrt{re} \]
  15. Add Preprocessing

Developer target: 47.8% accurate, 0.7× speedup?

\[\begin{array}{l} \\ \begin{array}{l} t_0 := \sqrt{re \cdot re + im \cdot im}\\ \mathbf{if}\;re < 0:\\ \;\;\;\;0.5 \cdot \left(\sqrt{2} \cdot \sqrt{\frac{im \cdot im}{t\_0 - re}}\right)\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(t\_0 + re\right)}\\ \end{array} \end{array} \]
(FPCore (re im)
 :precision binary64
 (let* ((t_0 (sqrt (+ (* re re) (* im im)))))
   (if (< re 0.0)
     (* 0.5 (* (sqrt 2.0) (sqrt (/ (* im im) (- t_0 re)))))
     (* 0.5 (sqrt (* 2.0 (+ t_0 re)))))))
double code(double re, double im) {
	double t_0 = sqrt(((re * re) + (im * im)));
	double tmp;
	if (re < 0.0) {
		tmp = 0.5 * (sqrt(2.0) * sqrt(((im * im) / (t_0 - re))));
	} else {
		tmp = 0.5 * sqrt((2.0 * (t_0 + re)));
	}
	return tmp;
}
real(8) function code(re, im)
    real(8), intent (in) :: re
    real(8), intent (in) :: im
    real(8) :: t_0
    real(8) :: tmp
    t_0 = sqrt(((re * re) + (im * im)))
    if (re < 0.0d0) then
        tmp = 0.5d0 * (sqrt(2.0d0) * sqrt(((im * im) / (t_0 - re))))
    else
        tmp = 0.5d0 * sqrt((2.0d0 * (t_0 + re)))
    end if
    code = tmp
end function
public static double code(double re, double im) {
	double t_0 = Math.sqrt(((re * re) + (im * im)));
	double tmp;
	if (re < 0.0) {
		tmp = 0.5 * (Math.sqrt(2.0) * Math.sqrt(((im * im) / (t_0 - re))));
	} else {
		tmp = 0.5 * Math.sqrt((2.0 * (t_0 + re)));
	}
	return tmp;
}
def code(re, im):
	t_0 = math.sqrt(((re * re) + (im * im)))
	tmp = 0
	if re < 0.0:
		tmp = 0.5 * (math.sqrt(2.0) * math.sqrt(((im * im) / (t_0 - re))))
	else:
		tmp = 0.5 * math.sqrt((2.0 * (t_0 + re)))
	return tmp
function code(re, im)
	t_0 = sqrt(Float64(Float64(re * re) + Float64(im * im)))
	tmp = 0.0
	if (re < 0.0)
		tmp = Float64(0.5 * Float64(sqrt(2.0) * sqrt(Float64(Float64(im * im) / Float64(t_0 - re)))));
	else
		tmp = Float64(0.5 * sqrt(Float64(2.0 * Float64(t_0 + re))));
	end
	return tmp
end
function tmp_2 = code(re, im)
	t_0 = sqrt(((re * re) + (im * im)));
	tmp = 0.0;
	if (re < 0.0)
		tmp = 0.5 * (sqrt(2.0) * sqrt(((im * im) / (t_0 - re))));
	else
		tmp = 0.5 * sqrt((2.0 * (t_0 + re)));
	end
	tmp_2 = tmp;
end
code[re_, im_] := Block[{t$95$0 = N[Sqrt[N[(N[(re * re), $MachinePrecision] + N[(im * im), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]}, If[Less[re, 0.0], N[(0.5 * N[(N[Sqrt[2.0], $MachinePrecision] * N[Sqrt[N[(N[(im * im), $MachinePrecision] / N[(t$95$0 - re), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(0.5 * N[Sqrt[N[(2.0 * N[(t$95$0 + re), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}

\\
\begin{array}{l}
t_0 := \sqrt{re \cdot re + im \cdot im}\\
\mathbf{if}\;re < 0:\\
\;\;\;\;0.5 \cdot \left(\sqrt{2} \cdot \sqrt{\frac{im \cdot im}{t\_0 - re}}\right)\\

\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(t\_0 + re\right)}\\


\end{array}
\end{array}

Reproduce

?
herbie shell --seed 2024043 
(FPCore (re im)
  :name "math.sqrt on complex, real part"
  :precision binary64

  :herbie-target
  (if (< re 0.0) (* 0.5 (* (sqrt 2.0) (sqrt (/ (* im im) (- (sqrt (+ (* re re) (* im im))) re))))) (* 0.5 (sqrt (* 2.0 (+ (sqrt (+ (* re re) (* im im))) re)))))

  (* 0.5 (sqrt (* 2.0 (+ (sqrt (+ (* re re) (* im im))) re)))))