Average Error: 38.6 → 22.7
Time: 4.6s
Precision: 64
\[0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}\]
\[\begin{array}{l} \mathbf{if}\;re \le -1.1661686244914884 \cdot 10^{135}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{im}{\frac{1 \cdot \left(-2 \cdot re\right)}{im}}}\\ \mathbf{elif}\;re \le 2.9879541772399109 \cdot 10^{-274}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{\frac{im}{\sqrt{re \cdot re + im \cdot im} - re}}{\frac{1}{im}}}\\ \mathbf{elif}\;re \le 3.11509516621680597 \cdot 10^{98}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im}} + re\right)}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(2 \cdot 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 \le -1.1661686244914884 \cdot 10^{135}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{im}{\frac{1 \cdot \left(-2 \cdot re\right)}{im}}}\\

\mathbf{elif}\;re \le 2.9879541772399109 \cdot 10^{-274}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{\frac{im}{\sqrt{re \cdot re + im \cdot im} - re}}{\frac{1}{im}}}\\

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

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

\end{array}
double f(double re, double im) {
        double r138937 = 0.5;
        double r138938 = 2.0;
        double r138939 = re;
        double r138940 = r138939 * r138939;
        double r138941 = im;
        double r138942 = r138941 * r138941;
        double r138943 = r138940 + r138942;
        double r138944 = sqrt(r138943);
        double r138945 = r138944 + r138939;
        double r138946 = r138938 * r138945;
        double r138947 = sqrt(r138946);
        double r138948 = r138937 * r138947;
        return r138948;
}

double f(double re, double im) {
        double r138949 = re;
        double r138950 = -1.1661686244914884e+135;
        bool r138951 = r138949 <= r138950;
        double r138952 = 0.5;
        double r138953 = 2.0;
        double r138954 = im;
        double r138955 = 1.0;
        double r138956 = -2.0;
        double r138957 = r138956 * r138949;
        double r138958 = r138955 * r138957;
        double r138959 = r138958 / r138954;
        double r138960 = r138954 / r138959;
        double r138961 = r138953 * r138960;
        double r138962 = sqrt(r138961);
        double r138963 = r138952 * r138962;
        double r138964 = 2.987954177239911e-274;
        bool r138965 = r138949 <= r138964;
        double r138966 = r138949 * r138949;
        double r138967 = r138954 * r138954;
        double r138968 = r138966 + r138967;
        double r138969 = sqrt(r138968);
        double r138970 = r138969 - r138949;
        double r138971 = r138954 / r138970;
        double r138972 = r138955 / r138954;
        double r138973 = r138971 / r138972;
        double r138974 = r138953 * r138973;
        double r138975 = sqrt(r138974);
        double r138976 = r138952 * r138975;
        double r138977 = 3.115095166216806e+98;
        bool r138978 = r138949 <= r138977;
        double r138979 = sqrt(r138969);
        double r138980 = r138979 * r138979;
        double r138981 = r138980 + r138949;
        double r138982 = r138953 * r138981;
        double r138983 = sqrt(r138982);
        double r138984 = r138952 * r138983;
        double r138985 = 2.0;
        double r138986 = r138985 * r138949;
        double r138987 = r138953 * r138986;
        double r138988 = sqrt(r138987);
        double r138989 = r138952 * r138988;
        double r138990 = r138978 ? r138984 : r138989;
        double r138991 = r138965 ? r138976 : r138990;
        double r138992 = r138951 ? r138963 : r138991;
        return r138992;
}

Error

Bits error versus re

Bits error versus im

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original38.6
Target33.7
Herbie22.7
\[\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 4 regimes
  2. if re < -1.1661686244914884e+135

    1. Initial program 62.7

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

      \[\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. Simplified48.6

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \frac{\color{blue}{{im}^{2}}}{\sqrt{re \cdot re + im \cdot im} - re}}\]
    5. Using strategy rm
    6. Applied unpow248.6

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

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \color{blue}{\frac{im}{\frac{\sqrt{re \cdot re + im \cdot im} - re}{im}}}}\]
    8. Using strategy rm
    9. Applied *-un-lft-identity48.2

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \frac{im}{\frac{\color{blue}{1 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}}{im}}}\]
    10. Taylor expanded around -inf 23.9

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

    if -1.1661686244914884e+135 < re < 2.987954177239911e-274

    1. Initial program 39.0

      \[0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}\]
    2. Using strategy rm
    3. Applied flip-+38.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.4

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \frac{\color{blue}{{im}^{2}}}{\sqrt{re \cdot re + im \cdot im} - re}}\]
    5. Using strategy rm
    6. Applied unpow231.4

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

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \color{blue}{\frac{im}{\frac{\sqrt{re \cdot re + im \cdot im} - re}{im}}}}\]
    8. Using strategy rm
    9. Applied *-un-lft-identity29.4

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \frac{im}{\frac{\color{blue}{1 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}}{im}}}\]
    10. Using strategy rm
    11. Applied div-inv29.4

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \frac{im}{\color{blue}{\left(1 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)\right) \cdot \frac{1}{im}}}}\]
    12. Applied associate-/r*29.4

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

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

    if 2.987954177239911e-274 < re < 3.115095166216806e+98

    1. Initial program 20.2

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

      \[\leadsto 0.5 \cdot \sqrt{2 \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-prod20.3

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

    if 3.115095166216806e+98 < re

    1. Initial program 50.6

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -1.1661686244914884 \cdot 10^{135}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{im}{\frac{1 \cdot \left(-2 \cdot re\right)}{im}}}\\ \mathbf{elif}\;re \le 2.9879541772399109 \cdot 10^{-274}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{\frac{im}{\sqrt{re \cdot re + im \cdot im} - re}}{\frac{1}{im}}}\\ \mathbf{elif}\;re \le 3.11509516621680597 \cdot 10^{98}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im}} + re\right)}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(2 \cdot re\right)}\\ \end{array}\]

Reproduce

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

  :herbie-target
  (if (< re 0.0) (* 0.5 (* (sqrt 2) (sqrt (/ (* im im) (- (sqrt (+ (* re re) (* im im))) re))))) (* 0.5 (sqrt (* 2 (+ (sqrt (+ (* re re) (* im im))) re)))))

  (* 0.5 (sqrt (* 2 (+ (sqrt (+ (* re re) (* im im))) re)))))