Average Error: 39.0 → 22.9
Time: 13.7s
Precision: 64
\[0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}\]
\[\begin{array}{l} \mathbf{if}\;im \le -1.441632117965090729034477936091225621824 \cdot 10^{130}:\\ \;\;\;\;\sqrt{\left(re - im\right) \cdot 2} \cdot 0.5\\ \mathbf{elif}\;im \le -2.189611672069496067339837167306464880369 \cdot 10^{-76}:\\ \;\;\;\;0.5 \cdot \sqrt{\frac{2}{\frac{\sqrt{im \cdot im + re \cdot re} - re}{im \cdot im}}}\\ \mathbf{elif}\;im \le -4.190115021433093475778322144492022440801 \cdot 10^{-106}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(re + re\right) \cdot 2}\\ \mathbf{elif}\;im \le -1.678034623638905128007132667026297084812 \cdot 10^{-192}:\\ \;\;\;\;0.5 \cdot \frac{\sqrt{2}}{\sqrt{\sqrt{im \cdot im + re \cdot re} - re} \cdot \frac{1}{\left|im\right|}}\\ \mathbf{elif}\;im \le -2.202839589489608152764748747416607358454 \cdot 10^{-271}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(re + re\right) \cdot 2}\\ \mathbf{elif}\;im \le -2.307054431974968782446493295888505497751 \cdot 10^{-297}:\\ \;\;\;\;\left(\sqrt{2} \cdot \frac{\left|im\right|}{\sqrt{\sqrt{im \cdot im + re \cdot re} - re}}\right) \cdot 0.5\\ \mathbf{elif}\;im \le 5.619322708680105428423648477878223187784 \cdot 10^{-154}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(re + re\right) \cdot 2}\\ \mathbf{elif}\;im \le 4.082479651686054026413039830347871667354 \cdot 10^{61}:\\ \;\;\;\;\left(\sqrt{2} \cdot \frac{\left|im\right|}{\sqrt{\sqrt{im \cdot im + re \cdot re} - re}}\right) \cdot 0.5\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(im + re\right) \cdot 2}\\ \end{array}\]
0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}
\begin{array}{l}
\mathbf{if}\;im \le -1.441632117965090729034477936091225621824 \cdot 10^{130}:\\
\;\;\;\;\sqrt{\left(re - im\right) \cdot 2} \cdot 0.5\\

\mathbf{elif}\;im \le -2.189611672069496067339837167306464880369 \cdot 10^{-76}:\\
\;\;\;\;0.5 \cdot \sqrt{\frac{2}{\frac{\sqrt{im \cdot im + re \cdot re} - re}{im \cdot im}}}\\

\mathbf{elif}\;im \le -4.190115021433093475778322144492022440801 \cdot 10^{-106}:\\
\;\;\;\;0.5 \cdot \sqrt{\left(re + re\right) \cdot 2}\\

\mathbf{elif}\;im \le -1.678034623638905128007132667026297084812 \cdot 10^{-192}:\\
\;\;\;\;0.5 \cdot \frac{\sqrt{2}}{\sqrt{\sqrt{im \cdot im + re \cdot re} - re} \cdot \frac{1}{\left|im\right|}}\\

\mathbf{elif}\;im \le -2.202839589489608152764748747416607358454 \cdot 10^{-271}:\\
\;\;\;\;0.5 \cdot \sqrt{\left(re + re\right) \cdot 2}\\

\mathbf{elif}\;im \le -2.307054431974968782446493295888505497751 \cdot 10^{-297}:\\
\;\;\;\;\left(\sqrt{2} \cdot \frac{\left|im\right|}{\sqrt{\sqrt{im \cdot im + re \cdot re} - re}}\right) \cdot 0.5\\

\mathbf{elif}\;im \le 5.619322708680105428423648477878223187784 \cdot 10^{-154}:\\
\;\;\;\;0.5 \cdot \sqrt{\left(re + re\right) \cdot 2}\\

\mathbf{elif}\;im \le 4.082479651686054026413039830347871667354 \cdot 10^{61}:\\
\;\;\;\;\left(\sqrt{2} \cdot \frac{\left|im\right|}{\sqrt{\sqrt{im \cdot im + re \cdot re} - re}}\right) \cdot 0.5\\

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

\end{array}
double f(double re, double im) {
        double r100809 = 0.5;
        double r100810 = 2.0;
        double r100811 = re;
        double r100812 = r100811 * r100811;
        double r100813 = im;
        double r100814 = r100813 * r100813;
        double r100815 = r100812 + r100814;
        double r100816 = sqrt(r100815);
        double r100817 = r100816 + r100811;
        double r100818 = r100810 * r100817;
        double r100819 = sqrt(r100818);
        double r100820 = r100809 * r100819;
        return r100820;
}

double f(double re, double im) {
        double r100821 = im;
        double r100822 = -1.4416321179650907e+130;
        bool r100823 = r100821 <= r100822;
        double r100824 = re;
        double r100825 = r100824 - r100821;
        double r100826 = 2.0;
        double r100827 = r100825 * r100826;
        double r100828 = sqrt(r100827);
        double r100829 = 0.5;
        double r100830 = r100828 * r100829;
        double r100831 = -2.189611672069496e-76;
        bool r100832 = r100821 <= r100831;
        double r100833 = r100821 * r100821;
        double r100834 = r100824 * r100824;
        double r100835 = r100833 + r100834;
        double r100836 = sqrt(r100835);
        double r100837 = r100836 - r100824;
        double r100838 = r100837 / r100833;
        double r100839 = r100826 / r100838;
        double r100840 = sqrt(r100839);
        double r100841 = r100829 * r100840;
        double r100842 = -4.1901150214330935e-106;
        bool r100843 = r100821 <= r100842;
        double r100844 = r100824 + r100824;
        double r100845 = r100844 * r100826;
        double r100846 = sqrt(r100845);
        double r100847 = r100829 * r100846;
        double r100848 = -1.6780346236389051e-192;
        bool r100849 = r100821 <= r100848;
        double r100850 = sqrt(r100826);
        double r100851 = sqrt(r100837);
        double r100852 = 1.0;
        double r100853 = fabs(r100821);
        double r100854 = r100852 / r100853;
        double r100855 = r100851 * r100854;
        double r100856 = r100850 / r100855;
        double r100857 = r100829 * r100856;
        double r100858 = -2.2028395894896082e-271;
        bool r100859 = r100821 <= r100858;
        double r100860 = -2.3070544319749688e-297;
        bool r100861 = r100821 <= r100860;
        double r100862 = r100853 / r100851;
        double r100863 = r100850 * r100862;
        double r100864 = r100863 * r100829;
        double r100865 = 5.6193227086801054e-154;
        bool r100866 = r100821 <= r100865;
        double r100867 = 4.082479651686054e+61;
        bool r100868 = r100821 <= r100867;
        double r100869 = r100821 + r100824;
        double r100870 = r100869 * r100826;
        double r100871 = sqrt(r100870);
        double r100872 = r100829 * r100871;
        double r100873 = r100868 ? r100864 : r100872;
        double r100874 = r100866 ? r100847 : r100873;
        double r100875 = r100861 ? r100864 : r100874;
        double r100876 = r100859 ? r100847 : r100875;
        double r100877 = r100849 ? r100857 : r100876;
        double r100878 = r100843 ? r100847 : r100877;
        double r100879 = r100832 ? r100841 : r100878;
        double r100880 = r100823 ? r100830 : r100879;
        return r100880;
}

Error

Bits error versus re

Bits error versus im

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original39.0
Target33.5
Herbie22.9
\[\begin{array}{l} \mathbf{if}\;re \lt 0.0:\\ \;\;\;\;0.5 \cdot \left(\sqrt{2} \cdot \sqrt{\frac{im \cdot im}{\sqrt{re \cdot re + im \cdot im} - re}}\right)\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}\\ \end{array}\]

Derivation

  1. Split input into 6 regimes
  2. if im < -1.4416321179650907e+130

    1. Initial program 57.7

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

      \[\leadsto \color{blue}{0.5 \cdot \sqrt{\left(\sqrt{re \cdot re + im \cdot im} + re\right) \cdot 2}}\]
    3. Using strategy rm
    4. Applied add-cube-cbrt57.8

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

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

      \[\leadsto 0.5 \cdot \sqrt{\left(\left(\sqrt[3]{\sqrt{im \cdot im + re \cdot re}} \cdot \sqrt[3]{\sqrt{im \cdot im + re \cdot re}}\right) \cdot \color{blue}{\sqrt[3]{\sqrt{im \cdot im + re \cdot re}}} + re\right) \cdot 2}\]
    7. Taylor expanded around -inf 8.2

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

    if -1.4416321179650907e+130 < im < -2.189611672069496e-76

    1. Initial program 22.8

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

      \[\leadsto \color{blue}{0.5 \cdot \sqrt{\left(\sqrt{re \cdot re + im \cdot im} + re\right) \cdot 2}}\]
    3. Using strategy rm
    4. Applied flip-+29.2

      \[\leadsto 0.5 \cdot \sqrt{\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}} \cdot 2}\]
    5. Applied associate-*l/29.2

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

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

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

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

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

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

    if -2.189611672069496e-76 < im < -4.1901150214330935e-106 or -1.6780346236389051e-192 < im < -2.2028395894896082e-271 or -2.3070544319749688e-297 < im < 5.6193227086801054e-154

    1. Initial program 41.8

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

      \[\leadsto \color{blue}{0.5 \cdot \sqrt{\left(\sqrt{re \cdot re + im \cdot im} + re\right) \cdot 2}}\]
    3. Taylor expanded around inf 36.6

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

    if -4.1901150214330935e-106 < im < -1.6780346236389051e-192

    1. Initial program 36.2

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

      \[\leadsto \color{blue}{0.5 \cdot \sqrt{\left(\sqrt{re \cdot re + im \cdot im} + re\right) \cdot 2}}\]
    3. Using strategy rm
    4. Applied flip-+50.8

      \[\leadsto 0.5 \cdot \sqrt{\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}} \cdot 2}\]
    5. Applied associate-*l/50.8

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

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

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

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

      \[\leadsto 0.5 \cdot \frac{\color{blue}{\sqrt{2} \cdot \sqrt{im \cdot im + 0}}}{\sqrt{\sqrt{im \cdot im + re \cdot re} - re}}\]
    11. Applied associate-/l*42.2

      \[\leadsto 0.5 \cdot \color{blue}{\frac{\sqrt{2}}{\frac{\sqrt{\sqrt{im \cdot im + re \cdot re} - re}}{\sqrt{im \cdot im + 0}}}}\]
    12. Simplified34.3

      \[\leadsto 0.5 \cdot \frac{\sqrt{2}}{\color{blue}{\frac{\sqrt{\sqrt{im \cdot im + re \cdot re} - re}}{\left|im\right|}}}\]
    13. Using strategy rm
    14. Applied div-inv34.3

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

    if -2.2028395894896082e-271 < im < -2.3070544319749688e-297 or 5.6193227086801054e-154 < im < 4.082479651686054e+61

    1. Initial program 27.9

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

      \[\leadsto \color{blue}{0.5 \cdot \sqrt{\left(\sqrt{re \cdot re + im \cdot im} + re\right) \cdot 2}}\]
    3. Using strategy rm
    4. Applied flip-+38.0

      \[\leadsto 0.5 \cdot \sqrt{\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}} \cdot 2}\]
    5. Applied associate-*l/38.0

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

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

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

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

      \[\leadsto 0.5 \cdot \frac{\color{blue}{\sqrt{2} \cdot \sqrt{im \cdot im + 0}}}{\sqrt{\sqrt{im \cdot im + re \cdot re} - re}}\]
    11. Applied associate-/l*26.9

      \[\leadsto 0.5 \cdot \color{blue}{\frac{\sqrt{2}}{\frac{\sqrt{\sqrt{im \cdot im + re \cdot re} - re}}{\sqrt{im \cdot im + 0}}}}\]
    12. Simplified25.9

      \[\leadsto 0.5 \cdot \frac{\sqrt{2}}{\color{blue}{\frac{\sqrt{\sqrt{im \cdot im + re \cdot re} - re}}{\left|im\right|}}}\]
    13. Using strategy rm
    14. Applied div-inv25.9

      \[\leadsto 0.5 \cdot \color{blue}{\left(\sqrt{2} \cdot \frac{1}{\frac{\sqrt{\sqrt{im \cdot im + re \cdot re} - re}}{\left|im\right|}}\right)}\]
    15. Simplified25.8

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

    if 4.082479651686054e+61 < im

    1. Initial program 46.8

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

      \[\leadsto \color{blue}{0.5 \cdot \sqrt{\left(\sqrt{re \cdot re + im \cdot im} + re\right) \cdot 2}}\]
    3. Using strategy rm
    4. Applied add-cube-cbrt47.0

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

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

      \[\leadsto 0.5 \cdot \sqrt{\left(\left(\sqrt[3]{\sqrt{im \cdot im + re \cdot re}} \cdot \sqrt[3]{\sqrt{im \cdot im + re \cdot re}}\right) \cdot \color{blue}{\sqrt[3]{\sqrt{im \cdot im + re \cdot re}}} + re\right) \cdot 2}\]
    7. Taylor expanded around inf 11.7

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;im \le -1.441632117965090729034477936091225621824 \cdot 10^{130}:\\ \;\;\;\;\sqrt{\left(re - im\right) \cdot 2} \cdot 0.5\\ \mathbf{elif}\;im \le -2.189611672069496067339837167306464880369 \cdot 10^{-76}:\\ \;\;\;\;0.5 \cdot \sqrt{\frac{2}{\frac{\sqrt{im \cdot im + re \cdot re} - re}{im \cdot im}}}\\ \mathbf{elif}\;im \le -4.190115021433093475778322144492022440801 \cdot 10^{-106}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(re + re\right) \cdot 2}\\ \mathbf{elif}\;im \le -1.678034623638905128007132667026297084812 \cdot 10^{-192}:\\ \;\;\;\;0.5 \cdot \frac{\sqrt{2}}{\sqrt{\sqrt{im \cdot im + re \cdot re} - re} \cdot \frac{1}{\left|im\right|}}\\ \mathbf{elif}\;im \le -2.202839589489608152764748747416607358454 \cdot 10^{-271}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(re + re\right) \cdot 2}\\ \mathbf{elif}\;im \le -2.307054431974968782446493295888505497751 \cdot 10^{-297}:\\ \;\;\;\;\left(\sqrt{2} \cdot \frac{\left|im\right|}{\sqrt{\sqrt{im \cdot im + re \cdot re} - re}}\right) \cdot 0.5\\ \mathbf{elif}\;im \le 5.619322708680105428423648477878223187784 \cdot 10^{-154}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(re + re\right) \cdot 2}\\ \mathbf{elif}\;im \le 4.082479651686054026413039830347871667354 \cdot 10^{61}:\\ \;\;\;\;\left(\sqrt{2} \cdot \frac{\left|im\right|}{\sqrt{\sqrt{im \cdot im + re \cdot re} - re}}\right) \cdot 0.5\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(im + re\right) \cdot 2}\\ \end{array}\]

Reproduce

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

  :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)))))