Average Error: 38.4 → 11.3
Time: 6.3s
Precision: binary64
Cost: 27844
\[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 -1.937472551084114 \cdot 10^{+129}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(re \cdot -2\right)}\\ \mathbf{elif}\;re \leq -4.253390744375976 \cdot 10^{-130}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{im \cdot im + re \cdot re} - re\right)}\\ \mathbf{elif}\;re \leq 1.2142340433856673 \cdot 10^{-151}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\ \mathbf{elif}\;re \leq 1.9275280704393263 \cdot 10^{+148}:\\ \;\;\;\;0.5 \cdot \frac{\sqrt{2} \cdot \left|im\right|}{\sqrt{re + \sqrt{im \cdot im + re \cdot re}}}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \left(\left(\left(im \cdot \sqrt{2}\right) \cdot \sqrt{0.5}\right) \cdot \sqrt{\frac{1}{re}}\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 -1.937472551084114 \cdot 10^{+129}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(re \cdot -2\right)}\\

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

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

\mathbf{elif}\;re \leq 1.9275280704393263 \cdot 10^{+148}:\\
\;\;\;\;0.5 \cdot \frac{\sqrt{2} \cdot \left|im\right|}{\sqrt{re + \sqrt{im \cdot im + re \cdot re}}}\\

\mathbf{else}:\\
\;\;\;\;0.5 \cdot \left(\left(\left(im \cdot \sqrt{2}\right) \cdot \sqrt{0.5}\right) \cdot \sqrt{\frac{1}{re}}\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 -1.937472551084114e+129)
   (* 0.5 (sqrt (* 2.0 (* re -2.0))))
   (if (<= re -4.253390744375976e-130)
     (* 0.5 (sqrt (* 2.0 (- (sqrt (+ (* im im) (* re re))) re))))
     (if (<= re 1.2142340433856673e-151)
       (* 0.5 (sqrt (* 2.0 (- im re))))
       (if (<= re 1.9275280704393263e+148)
         (*
          0.5
          (/
           (* (sqrt 2.0) (fabs im))
           (sqrt (+ re (sqrt (+ (* im im) (* re re)))))))
         (* 0.5 (* (* (* im (sqrt 2.0)) (sqrt 0.5)) (sqrt (/ 1.0 re)))))))))
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 <= -1.937472551084114e+129) {
		tmp = 0.5 * sqrt(2.0 * (re * -2.0));
	} else if (re <= -4.253390744375976e-130) {
		tmp = 0.5 * sqrt(2.0 * (sqrt((im * im) + (re * re)) - re));
	} else if (re <= 1.2142340433856673e-151) {
		tmp = 0.5 * sqrt(2.0 * (im - re));
	} else if (re <= 1.9275280704393263e+148) {
		tmp = 0.5 * ((sqrt(2.0) * fabs(im)) / sqrt(re + sqrt((im * im) + (re * re))));
	} else {
		tmp = 0.5 * (((im * sqrt(2.0)) * sqrt(0.5)) * sqrt(1.0 / re));
	}
	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

Alternatives

Alternative 1
Error38.9
Cost59968
\[0.5 \cdot \left(\sqrt[3]{\sqrt{2 \cdot \left(\sqrt{im \cdot im + re \cdot re} - re\right)}} \cdot \left(\sqrt[3]{\sqrt{2 \cdot \left(\sqrt{im \cdot im + re \cdot re} - re\right)}} \cdot \sqrt[3]{\sqrt{2 \cdot \left(\sqrt{im \cdot im + re \cdot re} - re\right)}}\right)\right)\]
Alternative 2
Error37.9
Cost52800
\[0.5 \cdot \left(\frac{\left|im\right|}{\sqrt{\sqrt{re + \sqrt{im \cdot im + re \cdot re}}}} \cdot \frac{\sqrt{2}}{\sqrt{\sqrt{re + \sqrt{im \cdot im + re \cdot re}}}}\right)\]
Alternative 3
Error38.0
Cost52800
\[0.5 \cdot \left(\frac{\left|im\right|}{\left|\sqrt[3]{re + \sqrt{im \cdot im + re \cdot re}}\right|} \cdot \frac{\sqrt{2}}{\sqrt{\sqrt[3]{re + \sqrt{im \cdot im + re \cdot re}}}}\right)\]
Alternative 4
Error31.5
Cost52416
\[0.5 \cdot \left(\sqrt{\sqrt{2} \cdot \sqrt{im}} \cdot \sqrt{\sqrt{2} \cdot \sqrt{im}} - 0.5 \cdot \left(\left(re \cdot \sqrt{2}\right) \cdot \sqrt{\frac{1}{im}}\right)\right)\]
Alternative 5
Error39.2
Cost46656
\[0.5 \cdot \sqrt{2 \cdot \left(\sqrt[3]{\sqrt{im \cdot im + re \cdot re}} \cdot \left(\sqrt[3]{\sqrt{im \cdot im + re \cdot re}} \cdot \sqrt[3]{\sqrt{im \cdot im + re \cdot re}}\right) - re\right)}\]
Alternative 6
Error55.5
Cost46400
\[0.5 \cdot \sqrt{2 \cdot \left(\frac{\sqrt{{re}^{6} + {im}^{6}}}{\sqrt{{re}^{4} + \left({im}^{4} - \left(im \cdot im\right) \cdot \left(re \cdot re\right)\right)}} - re\right)}\]
Alternative 7
Error47.8
Cost39360
\[0.5 \cdot \left(\sqrt{2} \cdot \sqrt{im} - 0.5 \cdot \left(\sqrt{\frac{1}{im}} \cdot e^{\log \left(re \cdot \sqrt{2}\right)}\right)\right)\]
Alternative 8
Error39.0
Cost33344
\[0.5 \cdot \sqrt{2 \cdot \left(\left|\sqrt[3]{im \cdot im + re \cdot re}\right| \cdot \sqrt{\sqrt[3]{im \cdot im + re \cdot re}} - re\right)}\]
Alternative 9
Error38.7
Cost33344
\[0.5 \cdot \sqrt{2 \cdot \left(\sqrt{\sqrt{im \cdot im + re \cdot re}} \cdot \sqrt{\sqrt{im \cdot im + re \cdot re}} - re\right)}\]
Alternative 10
Error48.5
Cost33152
\[0.5 \cdot \frac{\sqrt[3]{{\left(\sqrt{2 \cdot \left(im \cdot im\right)}\right)}^{3}}}{\sqrt{re + \sqrt{im \cdot im + re \cdot re}}}\]
Alternative 11
Error31.4
Cost26560
\[0.5 \cdot \left(\sqrt{2} \cdot \sqrt{im} - 0.5 \cdot \left(\left(re \cdot \sqrt{2}\right) \cdot \sqrt{\frac{1}{im}}\right)\right)\]
Alternative 12
Error37.8
Cost26560
\[0.5 \cdot \left(\left|im\right| \cdot \frac{\sqrt{2}}{\sqrt{re + \sqrt{im \cdot im + re \cdot re}}}\right)\]
Alternative 13
Error37.8
Cost26560
\[0.5 \cdot \frac{\sqrt{2} \cdot \left|im\right|}{\sqrt{re + \sqrt{im \cdot im + re \cdot re}}}\]
Alternative 14
Error47.1
Cost26496
\[0.5 \cdot \sqrt{2 \cdot \left(\sqrt[3]{{\left(\sqrt{im \cdot im + re \cdot re}\right)}^{3}} - re\right)}\]
Alternative 15
Error39.9
Cost26432
\[0.5 \cdot \sqrt{2 \cdot e^{\log \left(\sqrt{im \cdot im + re \cdot re} - re\right)}}\]
Alternative 16
Error61.6
Cost26432
\[0.5 \cdot \sqrt{2 \cdot \log \left(e^{\sqrt{im \cdot im + re \cdot re} - re}\right)}\]
Alternative 17
Error40.4
Cost26432
\[0.5 \cdot \sqrt{2 \cdot \left(e^{\log \left(\sqrt{im \cdot im + re \cdot re}\right)} - re\right)}\]
Alternative 18
Error39.9
Cost26432
\[0.5 \cdot e^{\log \left(\sqrt{2 \cdot \left(\sqrt{im \cdot im + re \cdot re} - re\right)}\right)}\]
Alternative 19
Error41.4
Cost20288
\[0.5 \cdot \frac{\sqrt{2 \cdot \left(im \cdot im\right)}}{\sqrt{re + \sqrt{im \cdot im + re \cdot re}}}\]
Alternative 20
Error31.2
Cost20224
\[0.5 \cdot \left({\left(2 \cdot im\right)}^{0.5} - 0.5 \cdot \left(\left(re \cdot \sqrt{2}\right) \cdot \sqrt{\frac{1}{im}}\right)\right)\]
Alternative 21
Error37.8
Cost20160
\[0.5 \cdot \frac{im \cdot \sqrt{2}}{\sqrt{re + \sqrt{im \cdot im + re \cdot re}}}\]
Alternative 22
Error47.6
Cost19904
\[0.5 \cdot \left(\left(\left(im \cdot \sqrt{2}\right) \cdot \sqrt{0.5}\right) \cdot \sqrt{\frac{1}{re}}\right)\]
Alternative 23
Error41.7
Cost13888
\[0.5 \cdot \sqrt{2 \cdot \frac{im \cdot im}{re + \sqrt{im \cdot im + re \cdot re}}}\]
Alternative 24
Error38.4
Cost13632
\[0.5 \cdot \sqrt{2 \cdot \left(\sqrt{im \cdot im + re \cdot re} - re\right)}\]
Alternative 25
Error53.1
Cost13504
\[0.5 \cdot \frac{\sqrt{2 \cdot \left(im \cdot im\right)}}{\sqrt{re + re}}\]
Alternative 26
Error48.2
Cost7360
\[0.5 \cdot \sqrt{2 \cdot \left(\left(\frac{im \cdot im}{re} \cdot -0.5 - re\right) - re\right)}\]
Alternative 27
Error54.7
Cost7104
\[0.5 \cdot \sqrt{2 \cdot \left(0.5 \cdot \frac{im \cdot im}{re}\right)}\]
Alternative 28
Error46.8
Cost6848
\[0.5 \cdot \sqrt{2 \cdot \left(re \cdot -2\right)}\]
Alternative 29
Error46.8
Cost6848
\[0.5 \cdot \sqrt{\left(re + re\right) \cdot -2}\]
Alternative 30
Error60.0
Cost6848
\[0.5 \cdot \sqrt{2 \cdot \left(re - re\right)}\]
Alternative 31
Error29.1
Cost6848
\[0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\]
Alternative 32
Error30.6
Cost6720
\[0.5 \cdot \sqrt{2 \cdot im}\]
Alternative 33
Error59.8
Cost64
\[1\]
Alternative 34
Error60.0
Cost64
\[0\]
Alternative 35
Error63.0
Cost64
\[-1\]

Error

Derivation

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

    1. Initial program 57.8

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

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

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

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

    if -1.9374725510841141e129 < re < -4.25339074437597611e-130

    1. Initial program 15.8

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

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

    if -4.25339074437597611e-130 < re < 1.2142340433856673e-151

    1. Initial program 29.2

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

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

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

    if 1.2142340433856673e-151 < re < 1.92752807043932628e148

    1. Initial program 43.0

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

      \[\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. Applied associate-*r/_binary64_34643.0

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

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

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

      \[\leadsto 0.5 \cdot \frac{\sqrt{\left(im \cdot im\right) \cdot 2}}{\color{blue}{\sqrt{re + \sqrt{re \cdot re + im \cdot im}}}}\]
    8. Using strategy rm
    9. Applied sqrt-prod_binary64_42028.5

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

      \[\leadsto 0.5 \cdot \frac{\color{blue}{\left|im\right|} \cdot \sqrt{2}}{\sqrt{re + \sqrt{re \cdot re + im \cdot im}}}\]
    11. Simplified15.5

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

    if 1.92752807043932628e148 < re

    1. Initial program 63.7

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

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

      \[\leadsto \color{blue}{0.5 \cdot \left(\left(\left(im \cdot \sqrt{2}\right) \cdot \sqrt{0.5}\right) \cdot \sqrt{\frac{1}{re}}\right)}\]
  3. Recombined 5 regimes into one program.
  4. Final simplification11.3

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \leq -1.937472551084114 \cdot 10^{+129}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(re \cdot -2\right)}\\ \mathbf{elif}\;re \leq -4.253390744375976 \cdot 10^{-130}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{im \cdot im + re \cdot re} - re\right)}\\ \mathbf{elif}\;re \leq 1.2142340433856673 \cdot 10^{-151}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\ \mathbf{elif}\;re \leq 1.9275280704393263 \cdot 10^{+148}:\\ \;\;\;\;0.5 \cdot \frac{\sqrt{2} \cdot \left|im\right|}{\sqrt{re + \sqrt{im \cdot im + re \cdot re}}}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \left(\left(\left(im \cdot \sqrt{2}\right) \cdot \sqrt{0.5}\right) \cdot \sqrt{\frac{1}{re}}\right)\\ \end{array}\]

Reproduce

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