Average Error: 37.5 → 18.3
Time: 19.1s
Precision: 64
\[0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}\]
\[\begin{array}{l} \mathbf{if}\;re \le -6.773854852154095 \cdot 10^{+130}:\\ \;\;\;\;\frac{\sqrt{\left(im \cdot im\right) \cdot 2.0}}{\sqrt{-2 \cdot re}} \cdot 0.5\\ \mathbf{elif}\;re \le -1.7939481438531874 \cdot 10^{-236}:\\ \;\;\;\;\left(\sqrt{2.0} \cdot \frac{\left|im\right|}{\sqrt{\sqrt{im \cdot im + re \cdot re} - re}}\right) \cdot 0.5\\ \mathbf{elif}\;re \le 2.7193766495029553 \cdot 10^{+99}:\\ \;\;\;\;\sqrt{\left(\sqrt{im \cdot im + re \cdot re} + re\right) \cdot 2.0} \cdot 0.5\\ \mathbf{else}:\\ \;\;\;\;\sqrt{\left(re + re\right) \cdot 2.0} \cdot 0.5\\ \end{array}\]
0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}
\begin{array}{l}
\mathbf{if}\;re \le -6.773854852154095 \cdot 10^{+130}:\\
\;\;\;\;\frac{\sqrt{\left(im \cdot im\right) \cdot 2.0}}{\sqrt{-2 \cdot re}} \cdot 0.5\\

\mathbf{elif}\;re \le -1.7939481438531874 \cdot 10^{-236}:\\
\;\;\;\;\left(\sqrt{2.0} \cdot \frac{\left|im\right|}{\sqrt{\sqrt{im \cdot im + re \cdot re} - re}}\right) \cdot 0.5\\

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

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

\end{array}
double f(double re, double im) {
        double r6540794 = 0.5;
        double r6540795 = 2.0;
        double r6540796 = re;
        double r6540797 = r6540796 * r6540796;
        double r6540798 = im;
        double r6540799 = r6540798 * r6540798;
        double r6540800 = r6540797 + r6540799;
        double r6540801 = sqrt(r6540800);
        double r6540802 = r6540801 + r6540796;
        double r6540803 = r6540795 * r6540802;
        double r6540804 = sqrt(r6540803);
        double r6540805 = r6540794 * r6540804;
        return r6540805;
}

double f(double re, double im) {
        double r6540806 = re;
        double r6540807 = -6.773854852154095e+130;
        bool r6540808 = r6540806 <= r6540807;
        double r6540809 = im;
        double r6540810 = r6540809 * r6540809;
        double r6540811 = 2.0;
        double r6540812 = r6540810 * r6540811;
        double r6540813 = sqrt(r6540812);
        double r6540814 = -2.0;
        double r6540815 = r6540814 * r6540806;
        double r6540816 = sqrt(r6540815);
        double r6540817 = r6540813 / r6540816;
        double r6540818 = 0.5;
        double r6540819 = r6540817 * r6540818;
        double r6540820 = -1.7939481438531874e-236;
        bool r6540821 = r6540806 <= r6540820;
        double r6540822 = sqrt(r6540811);
        double r6540823 = fabs(r6540809);
        double r6540824 = r6540806 * r6540806;
        double r6540825 = r6540810 + r6540824;
        double r6540826 = sqrt(r6540825);
        double r6540827 = r6540826 - r6540806;
        double r6540828 = sqrt(r6540827);
        double r6540829 = r6540823 / r6540828;
        double r6540830 = r6540822 * r6540829;
        double r6540831 = r6540830 * r6540818;
        double r6540832 = 2.7193766495029553e+99;
        bool r6540833 = r6540806 <= r6540832;
        double r6540834 = r6540826 + r6540806;
        double r6540835 = r6540834 * r6540811;
        double r6540836 = sqrt(r6540835);
        double r6540837 = r6540836 * r6540818;
        double r6540838 = r6540806 + r6540806;
        double r6540839 = r6540838 * r6540811;
        double r6540840 = sqrt(r6540839);
        double r6540841 = r6540840 * r6540818;
        double r6540842 = r6540833 ? r6540837 : r6540841;
        double r6540843 = r6540821 ? r6540831 : r6540842;
        double r6540844 = r6540808 ? r6540819 : r6540843;
        return r6540844;
}

Error

Bits error versus re

Bits error versus im

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original37.5
Target32.7
Herbie18.3
\[\begin{array}{l} \mathbf{if}\;re \lt 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.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}\\ \end{array}\]

Derivation

  1. Split input into 4 regimes
  2. if re < -6.773854852154095e+130

    1. Initial program 61.1

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

      \[\leadsto 0.5 \cdot \sqrt{2.0 \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. Simplified47.4

      \[\leadsto 0.5 \cdot \sqrt{2.0 \cdot \frac{\color{blue}{im \cdot im + 0}}{\sqrt{re \cdot re + im \cdot im} - re}}\]
    5. Using strategy rm
    6. Applied associate-*r/47.4

      \[\leadsto 0.5 \cdot \sqrt{\color{blue}{\frac{2.0 \cdot \left(im \cdot im + 0\right)}{\sqrt{re \cdot re + im \cdot im} - re}}}\]
    7. Applied sqrt-div46.3

      \[\leadsto 0.5 \cdot \color{blue}{\frac{\sqrt{2.0 \cdot \left(im \cdot im + 0\right)}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}}\]
    8. Simplified46.3

      \[\leadsto 0.5 \cdot \frac{\color{blue}{\sqrt{2.0 \cdot \left(im \cdot im\right)}}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\]
    9. Taylor expanded around -inf 18.5

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

    if -6.773854852154095e+130 < re < -1.7939481438531874e-236

    1. Initial program 39.8

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

      \[\leadsto 0.5 \cdot \sqrt{2.0 \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. Simplified30.1

      \[\leadsto 0.5 \cdot \sqrt{2.0 \cdot \frac{\color{blue}{im \cdot im + 0}}{\sqrt{re \cdot re + im \cdot im} - re}}\]
    5. Using strategy rm
    6. Applied associate-*r/30.1

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

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

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

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

      \[\leadsto 0.5 \cdot \frac{\color{blue}{\sqrt{2.0} \cdot \sqrt{im \cdot im}}}{1 \cdot \sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\]
    12. Applied times-frac29.2

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

      \[\leadsto 0.5 \cdot \left(\color{blue}{\sqrt{2.0}} \cdot \frac{\sqrt{im \cdot im}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\right)\]
    14. Using strategy rm
    15. Applied rem-sqrt-square18.1

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

    if -1.7939481438531874e-236 < re < 2.7193766495029553e+99

    1. Initial program 22.1

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

    if 2.7193766495029553e+99 < re

    1. Initial program 49.2

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -6.773854852154095 \cdot 10^{+130}:\\ \;\;\;\;\frac{\sqrt{\left(im \cdot im\right) \cdot 2.0}}{\sqrt{-2 \cdot re}} \cdot 0.5\\ \mathbf{elif}\;re \le -1.7939481438531874 \cdot 10^{-236}:\\ \;\;\;\;\left(\sqrt{2.0} \cdot \frac{\left|im\right|}{\sqrt{\sqrt{im \cdot im + re \cdot re} - re}}\right) \cdot 0.5\\ \mathbf{elif}\;re \le 2.7193766495029553 \cdot 10^{+99}:\\ \;\;\;\;\sqrt{\left(\sqrt{im \cdot im + re \cdot re} + re\right) \cdot 2.0} \cdot 0.5\\ \mathbf{else}:\\ \;\;\;\;\sqrt{\left(re + re\right) \cdot 2.0} \cdot 0.5\\ \end{array}\]

Reproduce

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

  :herbie-target
  (if (< re 0) (* 0.5 (* (sqrt 2) (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)))))