Average Error: 37.5 → 29.5
Time: 17.2s
Precision: 64
\[0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\]
\[\begin{array}{l} \mathbf{if}\;im \le -3.854335289020707 \cdot 10^{-144}:\\ \;\;\;\;\sqrt{2.0 \cdot \left(\sqrt{im \cdot im + re \cdot re} - re\right)} \cdot 0.5\\ \mathbf{elif}\;im \le -6.24220698546632 \cdot 10^{-279}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(-2 \cdot re\right)}\\ \mathbf{elif}\;im \le 4.714591495324224 \cdot 10^{-286}:\\ \;\;\;\;\sqrt{2.0 \cdot \left(\sqrt{im \cdot im + re \cdot re} - re\right)} \cdot 0.5\\ \mathbf{elif}\;im \le 2.7223497161661665 \cdot 10^{-265}:\\ \;\;\;\;0\\ \mathbf{elif}\;im \le 1.4179178681524915 \cdot 10^{-154}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(-2 \cdot re\right)}\\ \mathbf{elif}\;im \le 5.455674444836594 \cdot 10^{+103}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(\sqrt{\sqrt{im \cdot im + re \cdot re}} \cdot \sqrt{\sqrt{im \cdot im + re \cdot re}} - re\right) \cdot 2.0}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(im - re\right)}\\ \end{array}\]
0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}
\begin{array}{l}
\mathbf{if}\;im \le -3.854335289020707 \cdot 10^{-144}:\\
\;\;\;\;\sqrt{2.0 \cdot \left(\sqrt{im \cdot im + re \cdot re} - re\right)} \cdot 0.5\\

\mathbf{elif}\;im \le -6.24220698546632 \cdot 10^{-279}:\\
\;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(-2 \cdot re\right)}\\

\mathbf{elif}\;im \le 4.714591495324224 \cdot 10^{-286}:\\
\;\;\;\;\sqrt{2.0 \cdot \left(\sqrt{im \cdot im + re \cdot re} - re\right)} \cdot 0.5\\

\mathbf{elif}\;im \le 2.7223497161661665 \cdot 10^{-265}:\\
\;\;\;\;0\\

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

\mathbf{elif}\;im \le 5.455674444836594 \cdot 10^{+103}:\\
\;\;\;\;0.5 \cdot \sqrt{\left(\sqrt{\sqrt{im \cdot im + re \cdot re}} \cdot \sqrt{\sqrt{im \cdot im + re \cdot re}} - re\right) \cdot 2.0}\\

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

\end{array}
double f(double re, double im) {
        double r379777 = 0.5;
        double r379778 = 2.0;
        double r379779 = re;
        double r379780 = r379779 * r379779;
        double r379781 = im;
        double r379782 = r379781 * r379781;
        double r379783 = r379780 + r379782;
        double r379784 = sqrt(r379783);
        double r379785 = r379784 - r379779;
        double r379786 = r379778 * r379785;
        double r379787 = sqrt(r379786);
        double r379788 = r379777 * r379787;
        return r379788;
}

double f(double re, double im) {
        double r379789 = im;
        double r379790 = -3.854335289020707e-144;
        bool r379791 = r379789 <= r379790;
        double r379792 = 2.0;
        double r379793 = r379789 * r379789;
        double r379794 = re;
        double r379795 = r379794 * r379794;
        double r379796 = r379793 + r379795;
        double r379797 = sqrt(r379796);
        double r379798 = r379797 - r379794;
        double r379799 = r379792 * r379798;
        double r379800 = sqrt(r379799);
        double r379801 = 0.5;
        double r379802 = r379800 * r379801;
        double r379803 = -6.24220698546632e-279;
        bool r379804 = r379789 <= r379803;
        double r379805 = -2.0;
        double r379806 = r379805 * r379794;
        double r379807 = r379792 * r379806;
        double r379808 = sqrt(r379807);
        double r379809 = r379801 * r379808;
        double r379810 = 4.714591495324224e-286;
        bool r379811 = r379789 <= r379810;
        double r379812 = 2.7223497161661665e-265;
        bool r379813 = r379789 <= r379812;
        double r379814 = 0.0;
        double r379815 = 1.4179178681524915e-154;
        bool r379816 = r379789 <= r379815;
        double r379817 = 5.455674444836594e+103;
        bool r379818 = r379789 <= r379817;
        double r379819 = sqrt(r379797);
        double r379820 = r379819 * r379819;
        double r379821 = r379820 - r379794;
        double r379822 = r379821 * r379792;
        double r379823 = sqrt(r379822);
        double r379824 = r379801 * r379823;
        double r379825 = r379789 - r379794;
        double r379826 = r379792 * r379825;
        double r379827 = sqrt(r379826);
        double r379828 = r379801 * r379827;
        double r379829 = r379818 ? r379824 : r379828;
        double r379830 = r379816 ? r379809 : r379829;
        double r379831 = r379813 ? r379814 : r379830;
        double r379832 = r379811 ? r379802 : r379831;
        double r379833 = r379804 ? r379809 : r379832;
        double r379834 = r379791 ? r379802 : r379833;
        return r379834;
}

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 im < -3.854335289020707e-144 or -6.24220698546632e-279 < im < 4.714591495324224e-286

    1. Initial program 36.2

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

    if -3.854335289020707e-144 < im < -6.24220698546632e-279 or 2.7223497161661665e-265 < im < 1.4179178681524915e-154

    1. Initial program 42.9

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

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

    if 4.714591495324224e-286 < im < 2.7223497161661665e-265

    1. Initial program 37.0

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

      \[\leadsto 0.5 \cdot \color{blue}{0}\]

    if 1.4179178681524915e-154 < im < 5.455674444836594e+103

    1. Initial program 24.6

      \[0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\]
    2. Using strategy rm
    3. Applied add-sqr-sqrt24.6

      \[\leadsto 0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{\color{blue}{\sqrt{re \cdot re + im \cdot im} \cdot \sqrt{re \cdot re + im \cdot im}}} - re\right)}\]
    4. Applied sqrt-prod24.7

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

    if 5.455674444836594e+103 < im

    1. Initial program 50.2

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

      \[\leadsto 0.5 \cdot \sqrt{2.0 \cdot \left(\color{blue}{im} - re\right)}\]
  3. Recombined 5 regimes into one program.
  4. Final simplification29.5

    \[\leadsto \begin{array}{l} \mathbf{if}\;im \le -3.854335289020707 \cdot 10^{-144}:\\ \;\;\;\;\sqrt{2.0 \cdot \left(\sqrt{im \cdot im + re \cdot re} - re\right)} \cdot 0.5\\ \mathbf{elif}\;im \le -6.24220698546632 \cdot 10^{-279}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(-2 \cdot re\right)}\\ \mathbf{elif}\;im \le 4.714591495324224 \cdot 10^{-286}:\\ \;\;\;\;\sqrt{2.0 \cdot \left(\sqrt{im \cdot im + re \cdot re} - re\right)} \cdot 0.5\\ \mathbf{elif}\;im \le 2.7223497161661665 \cdot 10^{-265}:\\ \;\;\;\;0\\ \mathbf{elif}\;im \le 1.4179178681524915 \cdot 10^{-154}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(-2 \cdot re\right)}\\ \mathbf{elif}\;im \le 5.455674444836594 \cdot 10^{+103}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(\sqrt{\sqrt{im \cdot im + re \cdot re}} \cdot \sqrt{\sqrt{im \cdot im + re \cdot re}} - re\right) \cdot 2.0}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(im - re\right)}\\ \end{array}\]

Reproduce

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