Average Error: 38.8 → 23.2
Time: 15.2s
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 -2.502374243691867342237503607268776845296 \cdot 10^{151}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-\left(re + im\right)\right)}\\ \mathbf{elif}\;im \le -5.246119333473003277498362100151355132534 \cdot 10^{-164}:\\ \;\;\;\;0.5 \cdot \frac{\sqrt{2 \cdot {im}^{2}}}{\sqrt{re + \sqrt{re \cdot re + im \cdot im}}}\\ \mathbf{elif}\;im \le 1.575660648688742108488246116440489634012 \cdot 10^{-78}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\ \mathbf{elif}\;im \le 9.185171752674521661253698648574080044683 \cdot 10^{153}:\\ \;\;\;\;0.5 \cdot \frac{\sqrt{2 \cdot {im}^{2}}}{\sqrt{re + \sqrt{re \cdot re + im \cdot im}}}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - 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}\;im \le -2.502374243691867342237503607268776845296 \cdot 10^{151}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-\left(re + im\right)\right)}\\

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

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

\mathbf{elif}\;im \le 9.185171752674521661253698648574080044683 \cdot 10^{153}:\\
\;\;\;\;0.5 \cdot \frac{\sqrt{2 \cdot {im}^{2}}}{\sqrt{re + \sqrt{re \cdot re + im \cdot im}}}\\

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

\end{array}
double f(double re, double im) {
        double r24931 = 0.5;
        double r24932 = 2.0;
        double r24933 = re;
        double r24934 = r24933 * r24933;
        double r24935 = im;
        double r24936 = r24935 * r24935;
        double r24937 = r24934 + r24936;
        double r24938 = sqrt(r24937);
        double r24939 = r24938 - r24933;
        double r24940 = r24932 * r24939;
        double r24941 = sqrt(r24940);
        double r24942 = r24931 * r24941;
        return r24942;
}

double f(double re, double im) {
        double r24943 = im;
        double r24944 = -2.5023742436918673e+151;
        bool r24945 = r24943 <= r24944;
        double r24946 = 0.5;
        double r24947 = 2.0;
        double r24948 = re;
        double r24949 = r24948 + r24943;
        double r24950 = -r24949;
        double r24951 = r24947 * r24950;
        double r24952 = sqrt(r24951);
        double r24953 = r24946 * r24952;
        double r24954 = -5.246119333473003e-164;
        bool r24955 = r24943 <= r24954;
        double r24956 = 2.0;
        double r24957 = pow(r24943, r24956);
        double r24958 = r24947 * r24957;
        double r24959 = sqrt(r24958);
        double r24960 = r24948 * r24948;
        double r24961 = r24943 * r24943;
        double r24962 = r24960 + r24961;
        double r24963 = sqrt(r24962);
        double r24964 = r24948 + r24963;
        double r24965 = sqrt(r24964);
        double r24966 = r24959 / r24965;
        double r24967 = r24946 * r24966;
        double r24968 = 1.575660648688742e-78;
        bool r24969 = r24943 <= r24968;
        double r24970 = -2.0;
        double r24971 = r24970 * r24948;
        double r24972 = r24947 * r24971;
        double r24973 = sqrt(r24972);
        double r24974 = r24946 * r24973;
        double r24975 = 9.185171752674522e+153;
        bool r24976 = r24943 <= r24975;
        double r24977 = r24943 - r24948;
        double r24978 = r24947 * r24977;
        double r24979 = sqrt(r24978);
        double r24980 = r24946 * r24979;
        double r24981 = r24976 ? r24967 : r24980;
        double r24982 = r24969 ? r24974 : r24981;
        double r24983 = r24955 ? r24967 : r24982;
        double r24984 = r24945 ? r24953 : r24983;
        return r24984;
}

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 4 regimes
  2. if im < -2.5023742436918673e+151

    1. Initial program 63.3

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

      \[\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. Simplified63.2

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

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \frac{{im}^{2}}{\color{blue}{re + \sqrt{re \cdot re + im \cdot im}}}}\]
    6. Taylor expanded around -inf 7.9

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

    if -2.5023742436918673e+151 < im < -5.246119333473003e-164 or 1.575660648688742e-78 < im < 9.185171752674522e+153

    1. Initial program 23.9

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

      \[\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. Simplified23.8

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

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \frac{{im}^{2}}{\color{blue}{re + \sqrt{re \cdot re + im \cdot im}}}}\]
    6. Using strategy rm
    7. Applied associate-*r/23.8

      \[\leadsto 0.5 \cdot \sqrt{\color{blue}{\frac{2 \cdot {im}^{2}}{re + \sqrt{re \cdot re + im \cdot im}}}}\]
    8. Applied sqrt-div23.5

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

    if -5.246119333473003e-164 < im < 1.575660648688742e-78

    1. Initial program 39.8

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

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

    if 9.185171752674522e+153 < im

    1. Initial program 64.0

      \[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. Recombined 4 regimes into one program.
  4. Final simplification23.2

    \[\leadsto \begin{array}{l} \mathbf{if}\;im \le -2.502374243691867342237503607268776845296 \cdot 10^{151}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-\left(re + im\right)\right)}\\ \mathbf{elif}\;im \le -5.246119333473003277498362100151355132534 \cdot 10^{-164}:\\ \;\;\;\;0.5 \cdot \frac{\sqrt{2 \cdot {im}^{2}}}{\sqrt{re + \sqrt{re \cdot re + im \cdot im}}}\\ \mathbf{elif}\;im \le 1.575660648688742108488246116440489634012 \cdot 10^{-78}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\ \mathbf{elif}\;im \le 9.185171752674521661253698648574080044683 \cdot 10^{153}:\\ \;\;\;\;0.5 \cdot \frac{\sqrt{2 \cdot {im}^{2}}}{\sqrt{re + \sqrt{re \cdot re + im \cdot im}}}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\ \end{array}\]

Reproduce

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