Average Error: 37.5 → 27.1
Time: 15.5s
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 -7.501313924387043 \cdot 10^{-149}:\\ \;\;\;\;\sqrt{2.0 \cdot \frac{im \cdot im}{\sqrt{im \cdot im + re \cdot re} - re}} \cdot 0.5\\ \mathbf{elif}\;re \le 1.2475268769655207 \cdot 10^{-225}:\\ \;\;\;\;\sqrt{2.0 \cdot \left(im + re\right)} \cdot 0.5\\ \mathbf{elif}\;re \le 5.314683131961287 \cdot 10^{+99}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(re + \sqrt{\sqrt{\sqrt[3]{im \cdot im + re \cdot re} \cdot \sqrt[3]{im \cdot im + re \cdot re}}} \cdot \left(\sqrt{\sqrt{\sqrt[3]{im \cdot im + re \cdot re}}} \cdot \sqrt{\sqrt{im \cdot im + re \cdot re}}\right)\right)}\\ \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 -7.501313924387043 \cdot 10^{-149}:\\
\;\;\;\;\sqrt{2.0 \cdot \frac{im \cdot im}{\sqrt{im \cdot im + re \cdot re} - re}} \cdot 0.5\\

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

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

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

\end{array}
double f(double re, double im) {
        double r5349806 = 0.5;
        double r5349807 = 2.0;
        double r5349808 = re;
        double r5349809 = r5349808 * r5349808;
        double r5349810 = im;
        double r5349811 = r5349810 * r5349810;
        double r5349812 = r5349809 + r5349811;
        double r5349813 = sqrt(r5349812);
        double r5349814 = r5349813 + r5349808;
        double r5349815 = r5349807 * r5349814;
        double r5349816 = sqrt(r5349815);
        double r5349817 = r5349806 * r5349816;
        return r5349817;
}

double f(double re, double im) {
        double r5349818 = re;
        double r5349819 = -7.501313924387043e-149;
        bool r5349820 = r5349818 <= r5349819;
        double r5349821 = 2.0;
        double r5349822 = im;
        double r5349823 = r5349822 * r5349822;
        double r5349824 = r5349818 * r5349818;
        double r5349825 = r5349823 + r5349824;
        double r5349826 = sqrt(r5349825);
        double r5349827 = r5349826 - r5349818;
        double r5349828 = r5349823 / r5349827;
        double r5349829 = r5349821 * r5349828;
        double r5349830 = sqrt(r5349829);
        double r5349831 = 0.5;
        double r5349832 = r5349830 * r5349831;
        double r5349833 = 1.2475268769655207e-225;
        bool r5349834 = r5349818 <= r5349833;
        double r5349835 = r5349822 + r5349818;
        double r5349836 = r5349821 * r5349835;
        double r5349837 = sqrt(r5349836);
        double r5349838 = r5349837 * r5349831;
        double r5349839 = 5.314683131961287e+99;
        bool r5349840 = r5349818 <= r5349839;
        double r5349841 = cbrt(r5349825);
        double r5349842 = r5349841 * r5349841;
        double r5349843 = sqrt(r5349842);
        double r5349844 = sqrt(r5349843);
        double r5349845 = sqrt(r5349841);
        double r5349846 = sqrt(r5349845);
        double r5349847 = sqrt(r5349826);
        double r5349848 = r5349846 * r5349847;
        double r5349849 = r5349844 * r5349848;
        double r5349850 = r5349818 + r5349849;
        double r5349851 = r5349821 * r5349850;
        double r5349852 = sqrt(r5349851);
        double r5349853 = r5349831 * r5349852;
        double r5349854 = r5349818 + r5349818;
        double r5349855 = r5349854 * r5349821;
        double r5349856 = sqrt(r5349855);
        double r5349857 = r5349856 * r5349831;
        double r5349858 = r5349840 ? r5349853 : r5349857;
        double r5349859 = r5349834 ? r5349838 : r5349858;
        double r5349860 = r5349820 ? r5349832 : r5349859;
        return r5349860;
}

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.6
Herbie27.1
\[\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 < -7.501313924387043e-149

    1. Initial program 51.4

      \[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-sqrt52.1

      \[\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)}\]
    4. Using strategy rm
    5. Applied flip-+52.1

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

      \[\leadsto 0.5 \cdot \sqrt{2.0 \cdot \frac{\color{blue}{im \cdot im + 0}}{\sqrt{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im}} - re}}\]
    7. Simplified37.6

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

    if -7.501313924387043e-149 < re < 1.2475268769655207e-225

    1. Initial program 30.0

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

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

    if 1.2475268769655207e-225 < re < 5.314683131961287e+99

    1. Initial program 17.5

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

      \[\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)}\]
    4. Using strategy rm
    5. Applied add-cube-cbrt17.7

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

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

      \[\leadsto 0.5 \cdot \sqrt{2.0 \cdot \left(\color{blue}{\left(\sqrt{\sqrt{\sqrt[3]{re \cdot re + im \cdot im} \cdot \sqrt[3]{re \cdot re + im \cdot im}}} \cdot \sqrt{\sqrt{\sqrt[3]{re \cdot re + im \cdot im}}}\right)} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im}} + re\right)}\]
    8. Applied associate-*l*17.7

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

    if 5.314683131961287e+99 < re

    1. Initial program 49.5

      \[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-sqrt49.5

      \[\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)}\]
    4. Taylor expanded around inf 10.2

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -7.501313924387043 \cdot 10^{-149}:\\ \;\;\;\;\sqrt{2.0 \cdot \frac{im \cdot im}{\sqrt{im \cdot im + re \cdot re} - re}} \cdot 0.5\\ \mathbf{elif}\;re \le 1.2475268769655207 \cdot 10^{-225}:\\ \;\;\;\;\sqrt{2.0 \cdot \left(im + re\right)} \cdot 0.5\\ \mathbf{elif}\;re \le 5.314683131961287 \cdot 10^{+99}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(re + \sqrt{\sqrt{\sqrt[3]{im \cdot im + re \cdot re} \cdot \sqrt[3]{im \cdot im + re \cdot re}}} \cdot \left(\sqrt{\sqrt{\sqrt[3]{im \cdot im + re \cdot re}}} \cdot \sqrt{\sqrt{im \cdot im + re \cdot re}}\right)\right)}\\ \mathbf{else}:\\ \;\;\;\;\sqrt{\left(re + re\right) \cdot 2.0} \cdot 0.5\\ \end{array}\]

Reproduce

herbie shell --seed 2019130 
(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)))))