Average Error: 38.5 → 19.3
Time: 5.3s
Precision: binary64
\[im > 0\]
\[0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\]
\[\begin{array}{l} \mathbf{if}\;re \leq -92382353356.81528:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left(-re\right) - re\right)}\\ \mathbf{elif}\;re \leq -1.2610372716287457 \cdot 10^{-138}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\\ \mathbf{elif}\;re \leq 5.384102014280888 \cdot 10^{-20}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left(im + 0.5 \cdot \frac{re \cdot re}{im}\right) - re\right)}\\ \mathbf{elif}\;re \leq 4.7556426971851874 \cdot 10^{+114}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{im \cdot im}{re + \sqrt{re \cdot re + im \cdot im}}}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(0.0625 \cdot \frac{{im}^{6}}{{re}^{5}} + \left(0.5 \cdot \frac{im \cdot im}{re} - 0.125 \cdot \frac{{im}^{4}}{{re}^{3}}\right)\right)}\\ \end{array}\]
0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}
\begin{array}{l}
\mathbf{if}\;re \leq -92382353356.81528:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left(-re\right) - re\right)}\\

\mathbf{elif}\;re \leq -1.2610372716287457 \cdot 10^{-138}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\\

\mathbf{elif}\;re \leq 5.384102014280888 \cdot 10^{-20}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left(im + 0.5 \cdot \frac{re \cdot re}{im}\right) - re\right)}\\

\mathbf{elif}\;re \leq 4.7556426971851874 \cdot 10^{+114}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{im \cdot im}{re + \sqrt{re \cdot re + im \cdot im}}}\\

\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(0.0625 \cdot \frac{{im}^{6}}{{re}^{5}} + \left(0.5 \cdot \frac{im \cdot im}{re} - 0.125 \cdot \frac{{im}^{4}}{{re}^{3}}\right)\right)}\\

\end{array}
(FPCore (re im)
 :precision binary64
 (* 0.5 (sqrt (* 2.0 (- (sqrt (+ (* re re) (* im im))) re)))))
(FPCore (re im)
 :precision binary64
 (if (<= re -92382353356.81528)
   (* 0.5 (sqrt (* 2.0 (- (- re) re))))
   (if (<= re -1.2610372716287457e-138)
     (* 0.5 (sqrt (* 2.0 (- (sqrt (+ (* re re) (* im im))) re))))
     (if (<= re 5.384102014280888e-20)
       (* 0.5 (sqrt (* 2.0 (- (+ im (* 0.5 (/ (* re re) im))) re))))
       (if (<= re 4.7556426971851874e+114)
         (*
          0.5
          (sqrt (* 2.0 (/ (* im im) (+ re (sqrt (+ (* re re) (* im im))))))))
         (*
          0.5
          (sqrt
           (*
            2.0
            (+
             (* 0.0625 (/ (pow im 6.0) (pow re 5.0)))
             (-
              (* 0.5 (/ (* im im) re))
              (* 0.125 (/ (pow im 4.0) (pow re 3.0)))))))))))))
double code(double re, double im) {
	return 0.5 * sqrt(2.0 * (sqrt((re * re) + (im * im)) - re));
}
double code(double re, double im) {
	double tmp;
	if (re <= -92382353356.81528) {
		tmp = 0.5 * sqrt(2.0 * (-re - re));
	} else if (re <= -1.2610372716287457e-138) {
		tmp = 0.5 * sqrt(2.0 * (sqrt((re * re) + (im * im)) - re));
	} else if (re <= 5.384102014280888e-20) {
		tmp = 0.5 * sqrt(2.0 * ((im + (0.5 * ((re * re) / im))) - re));
	} else if (re <= 4.7556426971851874e+114) {
		tmp = 0.5 * sqrt(2.0 * ((im * im) / (re + sqrt((re * re) + (im * im)))));
	} else {
		tmp = 0.5 * sqrt(2.0 * ((0.0625 * (pow(im, 6.0) / pow(re, 5.0))) + ((0.5 * ((im * im) / re)) - (0.125 * (pow(im, 4.0) / pow(re, 3.0))))));
	}
	return tmp;
}

Error

Bits error versus re

Bits error versus im

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Split input into 5 regimes
  2. if re < -92382353356.815277

    1. Initial program 40.4

      \[0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\]
    2. Taylor expanded around -inf 13.3

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\color{blue}{-1 \cdot re} - re\right)}\]
    3. Simplified13.3

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\color{blue}{\left(-re\right)} - re\right)}\]

    if -92382353356.815277 < re < -1.26103727162874574e-138

    1. Initial program 15.6

      \[0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\]

    if -1.26103727162874574e-138 < re < 5.3841020142808883e-20

    1. Initial program 32.2

      \[0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\]
    2. Taylor expanded around 0 12.0

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

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

    if 5.3841020142808883e-20 < re < 4.75564269718518742e114

    1. Initial program 47.9

      \[0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\]
    2. Using strategy rm
    3. Applied flip--_binary64_39447.9

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \color{blue}{\frac{\sqrt{re \cdot re + im \cdot im} \cdot \sqrt{re \cdot re + im \cdot im} - re \cdot re}{\sqrt{re \cdot re + im \cdot im} + re}}}\]
    4. Simplified31.2

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \frac{\color{blue}{im \cdot im}}{\sqrt{re \cdot re + im \cdot im} + re}}\]
    5. Simplified31.2

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

    if 4.75564269718518742e114 < re

    1. Initial program 61.8

      \[0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\]
    2. Taylor expanded around inf 40.9

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \color{blue}{\left(\left(0.5 \cdot \frac{{im}^{2}}{re} + 0.0625 \cdot \frac{{im}^{6}}{{re}^{5}}\right) - 0.125 \cdot \frac{{im}^{4}}{{re}^{3}}\right)}}\]
    3. Simplified40.9

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \color{blue}{\left(0.0625 \cdot \frac{{im}^{6}}{{re}^{5}} + \left(0.5 \cdot \frac{im \cdot im}{re} - 0.125 \cdot \frac{{im}^{4}}{{re}^{3}}\right)\right)}}\]
  3. Recombined 5 regimes into one program.
  4. Final simplification19.3

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \leq -92382353356.81528:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left(-re\right) - re\right)}\\ \mathbf{elif}\;re \leq -1.2610372716287457 \cdot 10^{-138}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\\ \mathbf{elif}\;re \leq 5.384102014280888 \cdot 10^{-20}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left(im + 0.5 \cdot \frac{re \cdot re}{im}\right) - re\right)}\\ \mathbf{elif}\;re \leq 4.7556426971851874 \cdot 10^{+114}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{im \cdot im}{re + \sqrt{re \cdot re + im \cdot im}}}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(0.0625 \cdot \frac{{im}^{6}}{{re}^{5}} + \left(0.5 \cdot \frac{im \cdot im}{re} - 0.125 \cdot \frac{{im}^{4}}{{re}^{3}}\right)\right)}\\ \end{array}\]

Reproduce

herbie shell --seed 2021079 
(FPCore (re im)
  :name "math.sqrt on complex, imaginary part, im greater than 0 branch"
  :precision binary64
  :pre (> im 0.0)
  (* 0.5 (sqrt (* 2.0 (- (sqrt (+ (* re re) (* im im))) re)))))