Average Error: 38.3 → 24.8
Time: 3.8s
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 -3.14091568832087229374045001906567508277 \cdot 10^{189}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{im \cdot im}{-2 \cdot re}}\\ \mathbf{elif}\;re \le -1.488749840237467467046649993736781737408 \cdot 10^{-304}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im \cdot \frac{im}{\sqrt{re \cdot re + im \cdot im} - re}\right)}\\ \mathbf{elif}\;re \le 8.200231256875077595325692973571730595543 \cdot 10^{-281}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(re + im\right)}\\ \mathbf{elif}\;re \le 1.285382656044220860536640397267855783932 \cdot 10^{67}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot {e}^{\left(\log \left(\sqrt{re \cdot re + im \cdot im} + re\right)\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 -3.14091568832087229374045001906567508277 \cdot 10^{189}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{im \cdot im}{-2 \cdot re}}\\

\mathbf{elif}\;re \le -1.488749840237467467046649993736781737408 \cdot 10^{-304}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im \cdot \frac{im}{\sqrt{re \cdot re + im \cdot im} - re}\right)}\\

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

\mathbf{elif}\;re \le 1.285382656044220860536640397267855783932 \cdot 10^{67}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot {e}^{\left(\log \left(\sqrt{re \cdot re + im \cdot im} + re\right)\right)}}\\

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

\end{array}
double f(double re, double im) {
        double r318119 = 0.5;
        double r318120 = 2.0;
        double r318121 = re;
        double r318122 = r318121 * r318121;
        double r318123 = im;
        double r318124 = r318123 * r318123;
        double r318125 = r318122 + r318124;
        double r318126 = sqrt(r318125);
        double r318127 = r318126 + r318121;
        double r318128 = r318120 * r318127;
        double r318129 = sqrt(r318128);
        double r318130 = r318119 * r318129;
        return r318130;
}

double f(double re, double im) {
        double r318131 = re;
        double r318132 = -3.1409156883208723e+189;
        bool r318133 = r318131 <= r318132;
        double r318134 = 0.5;
        double r318135 = 2.0;
        double r318136 = im;
        double r318137 = r318136 * r318136;
        double r318138 = -2.0;
        double r318139 = r318138 * r318131;
        double r318140 = r318137 / r318139;
        double r318141 = r318135 * r318140;
        double r318142 = sqrt(r318141);
        double r318143 = r318134 * r318142;
        double r318144 = -1.4887498402374675e-304;
        bool r318145 = r318131 <= r318144;
        double r318146 = r318131 * r318131;
        double r318147 = r318146 + r318137;
        double r318148 = sqrt(r318147);
        double r318149 = r318148 - r318131;
        double r318150 = r318136 / r318149;
        double r318151 = r318136 * r318150;
        double r318152 = r318135 * r318151;
        double r318153 = sqrt(r318152);
        double r318154 = r318134 * r318153;
        double r318155 = 8.200231256875078e-281;
        bool r318156 = r318131 <= r318155;
        double r318157 = r318131 + r318136;
        double r318158 = r318135 * r318157;
        double r318159 = sqrt(r318158);
        double r318160 = r318134 * r318159;
        double r318161 = 1.2853826560442209e+67;
        bool r318162 = r318131 <= r318161;
        double r318163 = exp(1.0);
        double r318164 = r318148 + r318131;
        double r318165 = log(r318164);
        double r318166 = pow(r318163, r318165);
        double r318167 = r318135 * r318166;
        double r318168 = sqrt(r318167);
        double r318169 = r318134 * r318168;
        double r318170 = 2.0;
        double r318171 = r318170 * r318131;
        double r318172 = r318135 * r318171;
        double r318173 = sqrt(r318172);
        double r318174 = r318134 * r318173;
        double r318175 = r318162 ? r318169 : r318174;
        double r318176 = r318156 ? r318160 : r318175;
        double r318177 = r318145 ? r318154 : r318176;
        double r318178 = r318133 ? r318143 : r318177;
        return r318178;
}

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.3
Target33.3
Herbie24.8
\[\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 5 regimes
  2. if re < -3.1409156883208723e+189

    1. Initial program 64.0

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

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

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

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

    if -3.1409156883208723e+189 < re < -1.4887498402374675e-304

    1. Initial program 41.4

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

      \[\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. Simplified32.0

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \frac{\color{blue}{im \cdot im}}{\sqrt{re \cdot re + im \cdot im} - re}}\]
    5. Using strategy rm
    6. Applied *-un-lft-identity32.0

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

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

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

    if -1.4887498402374675e-304 < re < 8.200231256875078e-281

    1. Initial program 28.6

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

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

    if 8.200231256875078e-281 < re < 1.2853826560442209e+67

    1. Initial program 21.2

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

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \color{blue}{e^{\log \left(\sqrt{re \cdot re + im \cdot im} + re\right)}}}\]
    4. Using strategy rm
    5. Applied pow123.5

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot e^{\log \color{blue}{\left({\left(\sqrt{re \cdot re + im \cdot im} + re\right)}^{1}\right)}}}\]
    6. Applied log-pow23.5

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot e^{\color{blue}{1 \cdot \log \left(\sqrt{re \cdot re + im \cdot im} + re\right)}}}\]
    7. Applied exp-prod23.8

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \color{blue}{{\left(e^{1}\right)}^{\left(\log \left(\sqrt{re \cdot re + im \cdot im} + re\right)\right)}}}\]
    8. Simplified23.8

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

    if 1.2853826560442209e+67 < re

    1. Initial program 45.0

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -3.14091568832087229374045001906567508277 \cdot 10^{189}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{im \cdot im}{-2 \cdot re}}\\ \mathbf{elif}\;re \le -1.488749840237467467046649993736781737408 \cdot 10^{-304}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im \cdot \frac{im}{\sqrt{re \cdot re + im \cdot im} - re}\right)}\\ \mathbf{elif}\;re \le 8.200231256875077595325692973571730595543 \cdot 10^{-281}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(re + im\right)}\\ \mathbf{elif}\;re \le 1.285382656044220860536640397267855783932 \cdot 10^{67}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot {e}^{\left(\log \left(\sqrt{re \cdot re + im \cdot im} + re\right)\right)}}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(2 \cdot re\right)}\\ \end{array}\]

Reproduce

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