Average Error: 38.9 → 26.5
Time: 15.2s
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 4.003218908727751769435456693065969257664 \cdot 10^{-310}:\\ \;\;\;\;0.5 \cdot \frac{\sqrt{\left(im \cdot im\right) \cdot 2}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\\ \mathbf{elif}\;re \le 8.148041992667695284543397003902154699559 \cdot 10^{135}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left({\left(\sqrt{\sqrt{\sqrt{re \cdot re + im \cdot im}}}\right)}^{3} \cdot \sqrt{\sqrt{\sqrt{re \cdot re + im \cdot im}}} + re\right)}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(re + 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 4.003218908727751769435456693065969257664 \cdot 10^{-310}:\\
\;\;\;\;0.5 \cdot \frac{\sqrt{\left(im \cdot im\right) \cdot 2}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\\

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

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

\end{array}
double f(double re, double im) {
        double r149167 = 0.5;
        double r149168 = 2.0;
        double r149169 = re;
        double r149170 = r149169 * r149169;
        double r149171 = im;
        double r149172 = r149171 * r149171;
        double r149173 = r149170 + r149172;
        double r149174 = sqrt(r149173);
        double r149175 = r149174 + r149169;
        double r149176 = r149168 * r149175;
        double r149177 = sqrt(r149176);
        double r149178 = r149167 * r149177;
        return r149178;
}

double f(double re, double im) {
        double r149179 = re;
        double r149180 = 4.00321890872775e-310;
        bool r149181 = r149179 <= r149180;
        double r149182 = 0.5;
        double r149183 = im;
        double r149184 = r149183 * r149183;
        double r149185 = 2.0;
        double r149186 = r149184 * r149185;
        double r149187 = sqrt(r149186);
        double r149188 = r149179 * r149179;
        double r149189 = r149188 + r149184;
        double r149190 = sqrt(r149189);
        double r149191 = r149190 - r149179;
        double r149192 = sqrt(r149191);
        double r149193 = r149187 / r149192;
        double r149194 = r149182 * r149193;
        double r149195 = 8.148041992667695e+135;
        bool r149196 = r149179 <= r149195;
        double r149197 = sqrt(r149190);
        double r149198 = sqrt(r149197);
        double r149199 = 3.0;
        double r149200 = pow(r149198, r149199);
        double r149201 = r149200 * r149198;
        double r149202 = r149201 + r149179;
        double r149203 = r149185 * r149202;
        double r149204 = sqrt(r149203);
        double r149205 = r149182 * r149204;
        double r149206 = r149179 + r149179;
        double r149207 = r149185 * r149206;
        double r149208 = sqrt(r149207);
        double r149209 = r149182 * r149208;
        double r149210 = r149196 ? r149205 : r149209;
        double r149211 = r149181 ? r149194 : r149210;
        return r149211;
}

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.9
Target33.7
Herbie26.5
\[\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 3 regimes
  2. if re < 4.00321890872775e-310

    1. Initial program 46.3

      \[0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}\]
    2. Using strategy rm
    3. Applied flip-+46.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. Applied associate-*r/46.2

      \[\leadsto 0.5 \cdot \sqrt{\color{blue}{\frac{2 \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-div46.2

      \[\leadsto 0.5 \cdot \color{blue}{\frac{\sqrt{2 \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. Simplified35.1

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

    if 4.00321890872775e-310 < re < 8.148041992667695e+135

    1. Initial program 21.0

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

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

      \[\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)}\]
    5. Using strategy rm
    6. Applied add-sqr-sqrt21.1

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

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

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\sqrt{\sqrt{re \cdot re + im \cdot im}} \cdot \color{blue}{\left(\sqrt{\sqrt{\sqrt{re \cdot re + im \cdot im}}} \cdot \sqrt{\sqrt{\sqrt{re \cdot re + im \cdot im}}}\right)} + re\right)}\]
    9. Applied associate-*r*21.2

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

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

    if 8.148041992667695e+135 < re

    1. Initial program 58.0

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le 4.003218908727751769435456693065969257664 \cdot 10^{-310}:\\ \;\;\;\;0.5 \cdot \frac{\sqrt{\left(im \cdot im\right) \cdot 2}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\\ \mathbf{elif}\;re \le 8.148041992667695284543397003902154699559 \cdot 10^{135}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left({\left(\sqrt{\sqrt{\sqrt{re \cdot re + im \cdot im}}}\right)}^{3} \cdot \sqrt{\sqrt{\sqrt{re \cdot re + im \cdot im}}} + re\right)}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(re + re\right)}\\ \end{array}\]

Reproduce

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