Average Error: 37.6 → 18.4
Time: 14.0s
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 -3.106642014201959 \cdot 10^{+51}:\\ \;\;\;\;\frac{\left|im\right| \cdot \sqrt{2.0}}{\sqrt{-2 \cdot re}} \cdot 0.5\\ \mathbf{elif}\;re \le -9.529220942855773 \cdot 10^{-250}:\\ \;\;\;\;\left(\left(\left|im\right| \cdot \sqrt{2.0}\right) \cdot \frac{1}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\right) \cdot 0.5\\ \mathbf{elif}\;re \le 1.3130508878524708 \cdot 10^{-291}:\\ \;\;\;\;\sqrt{\left(re + im\right) \cdot 2.0} \cdot 0.5\\ \mathbf{elif}\;re \le 3.4696741244957 \cdot 10^{+92}:\\ \;\;\;\;\sqrt{2.0 \cdot \left(re + e^{\log \left(\sqrt{re \cdot re + im \cdot im}\right)}\right)} \cdot 0.5\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(re + re\right)}\\ \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 -3.106642014201959 \cdot 10^{+51}:\\
\;\;\;\;\frac{\left|im\right| \cdot \sqrt{2.0}}{\sqrt{-2 \cdot re}} \cdot 0.5\\

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

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

\mathbf{elif}\;re \le 3.4696741244957 \cdot 10^{+92}:\\
\;\;\;\;\sqrt{2.0 \cdot \left(re + e^{\log \left(\sqrt{re \cdot re + im \cdot im}\right)}\right)} \cdot 0.5\\

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

\end{array}
double f(double re, double im) {
        double r4202124 = 0.5;
        double r4202125 = 2.0;
        double r4202126 = re;
        double r4202127 = r4202126 * r4202126;
        double r4202128 = im;
        double r4202129 = r4202128 * r4202128;
        double r4202130 = r4202127 + r4202129;
        double r4202131 = sqrt(r4202130);
        double r4202132 = r4202131 + r4202126;
        double r4202133 = r4202125 * r4202132;
        double r4202134 = sqrt(r4202133);
        double r4202135 = r4202124 * r4202134;
        return r4202135;
}

double f(double re, double im) {
        double r4202136 = re;
        double r4202137 = -3.106642014201959e+51;
        bool r4202138 = r4202136 <= r4202137;
        double r4202139 = im;
        double r4202140 = fabs(r4202139);
        double r4202141 = 2.0;
        double r4202142 = sqrt(r4202141);
        double r4202143 = r4202140 * r4202142;
        double r4202144 = -2.0;
        double r4202145 = r4202144 * r4202136;
        double r4202146 = sqrt(r4202145);
        double r4202147 = r4202143 / r4202146;
        double r4202148 = 0.5;
        double r4202149 = r4202147 * r4202148;
        double r4202150 = -9.529220942855773e-250;
        bool r4202151 = r4202136 <= r4202150;
        double r4202152 = 1.0;
        double r4202153 = r4202136 * r4202136;
        double r4202154 = r4202139 * r4202139;
        double r4202155 = r4202153 + r4202154;
        double r4202156 = sqrt(r4202155);
        double r4202157 = r4202156 - r4202136;
        double r4202158 = sqrt(r4202157);
        double r4202159 = r4202152 / r4202158;
        double r4202160 = r4202143 * r4202159;
        double r4202161 = r4202160 * r4202148;
        double r4202162 = 1.3130508878524708e-291;
        bool r4202163 = r4202136 <= r4202162;
        double r4202164 = r4202136 + r4202139;
        double r4202165 = r4202164 * r4202141;
        double r4202166 = sqrt(r4202165);
        double r4202167 = r4202166 * r4202148;
        double r4202168 = 3.4696741244957e+92;
        bool r4202169 = r4202136 <= r4202168;
        double r4202170 = log(r4202156);
        double r4202171 = exp(r4202170);
        double r4202172 = r4202136 + r4202171;
        double r4202173 = r4202141 * r4202172;
        double r4202174 = sqrt(r4202173);
        double r4202175 = r4202174 * r4202148;
        double r4202176 = r4202136 + r4202136;
        double r4202177 = r4202141 * r4202176;
        double r4202178 = sqrt(r4202177);
        double r4202179 = r4202148 * r4202178;
        double r4202180 = r4202169 ? r4202175 : r4202179;
        double r4202181 = r4202163 ? r4202167 : r4202180;
        double r4202182 = r4202151 ? r4202161 : r4202181;
        double r4202183 = r4202138 ? r4202149 : r4202182;
        return r4202183;
}

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.6
Target32.5
Herbie18.4
\[\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 5 regimes
  2. if re < -3.106642014201959e+51

    1. Initial program 57.3

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

      \[\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. Applied associate-*r/57.3

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

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

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

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

      \[\leadsto 0.5 \cdot \frac{\sqrt{2.0} \cdot \color{blue}{\left|im\right|}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\]
    10. Taylor expanded around -inf 12.0

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

    if -3.106642014201959e+51 < re < -9.529220942855773e-250

    1. Initial program 37.6

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

      \[\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. Applied associate-*r/37.5

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

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

      \[\leadsto 0.5 \cdot \frac{\color{blue}{\sqrt{2.0 \cdot \left(im \cdot im + 0\right)}}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\]
    7. Using strategy rm
    8. Applied sqrt-prod30.4

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

      \[\leadsto 0.5 \cdot \frac{\sqrt{2.0} \cdot \color{blue}{\left|im\right|}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\]
    10. Using strategy rm
    11. Applied div-inv20.0

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

    if -9.529220942855773e-250 < re < 1.3130508878524708e-291

    1. Initial program 31.6

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

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

    if 1.3130508878524708e-291 < re < 3.4696741244957e+92

    1. Initial program 19.9

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

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

    if 3.4696741244957e+92 < re

    1. Initial program 48.5

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -3.106642014201959 \cdot 10^{+51}:\\ \;\;\;\;\frac{\left|im\right| \cdot \sqrt{2.0}}{\sqrt{-2 \cdot re}} \cdot 0.5\\ \mathbf{elif}\;re \le -9.529220942855773 \cdot 10^{-250}:\\ \;\;\;\;\left(\left(\left|im\right| \cdot \sqrt{2.0}\right) \cdot \frac{1}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\right) \cdot 0.5\\ \mathbf{elif}\;re \le 1.3130508878524708 \cdot 10^{-291}:\\ \;\;\;\;\sqrt{\left(re + im\right) \cdot 2.0} \cdot 0.5\\ \mathbf{elif}\;re \le 3.4696741244957 \cdot 10^{+92}:\\ \;\;\;\;\sqrt{2.0 \cdot \left(re + e^{\log \left(\sqrt{re \cdot re + im \cdot im}\right)}\right)} \cdot 0.5\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(re + re\right)}\\ \end{array}\]

Reproduce

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