Average Error: 37.7 → 22.7
Time: 25.6s
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.200905127333683 \cdot 10^{+79}:\\ \;\;\;\;\frac{\sqrt{\left(im \cdot im\right) \cdot 2.0}}{\sqrt{-2 \cdot re}} \cdot 0.5\\ \mathbf{elif}\;re \le -5.524921853974811 \cdot 10^{-304}:\\ \;\;\;\;\sqrt{\frac{\left(im \cdot im\right) \cdot 2.0}{\sqrt{im \cdot im + re \cdot re} - re}} \cdot 0.5\\ \mathbf{elif}\;re \le 2.6316271211357036 \cdot 10^{+127}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(re + \left(\sqrt{\sqrt{\sqrt[3]{im \cdot im + re \cdot re}}} \cdot \left|\sqrt[3]{im \cdot im + re \cdot re}\right|\right) \cdot \sqrt{\sqrt{\sqrt[3]{im \cdot im + re \cdot re}}}\right)}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(re + re\right) \cdot 2.0}\\ \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.200905127333683 \cdot 10^{+79}:\\
\;\;\;\;\frac{\sqrt{\left(im \cdot im\right) \cdot 2.0}}{\sqrt{-2 \cdot re}} \cdot 0.5\\

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

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

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

\end{array}
double f(double re, double im) {
        double r17761356 = 0.5;
        double r17761357 = 2.0;
        double r17761358 = re;
        double r17761359 = r17761358 * r17761358;
        double r17761360 = im;
        double r17761361 = r17761360 * r17761360;
        double r17761362 = r17761359 + r17761361;
        double r17761363 = sqrt(r17761362);
        double r17761364 = r17761363 + r17761358;
        double r17761365 = r17761357 * r17761364;
        double r17761366 = sqrt(r17761365);
        double r17761367 = r17761356 * r17761366;
        return r17761367;
}

double f(double re, double im) {
        double r17761368 = re;
        double r17761369 = -3.200905127333683e+79;
        bool r17761370 = r17761368 <= r17761369;
        double r17761371 = im;
        double r17761372 = r17761371 * r17761371;
        double r17761373 = 2.0;
        double r17761374 = r17761372 * r17761373;
        double r17761375 = sqrt(r17761374);
        double r17761376 = -2.0;
        double r17761377 = r17761376 * r17761368;
        double r17761378 = sqrt(r17761377);
        double r17761379 = r17761375 / r17761378;
        double r17761380 = 0.5;
        double r17761381 = r17761379 * r17761380;
        double r17761382 = -5.524921853974811e-304;
        bool r17761383 = r17761368 <= r17761382;
        double r17761384 = r17761368 * r17761368;
        double r17761385 = r17761372 + r17761384;
        double r17761386 = sqrt(r17761385);
        double r17761387 = r17761386 - r17761368;
        double r17761388 = r17761374 / r17761387;
        double r17761389 = sqrt(r17761388);
        double r17761390 = r17761389 * r17761380;
        double r17761391 = 2.6316271211357036e+127;
        bool r17761392 = r17761368 <= r17761391;
        double r17761393 = cbrt(r17761385);
        double r17761394 = sqrt(r17761393);
        double r17761395 = sqrt(r17761394);
        double r17761396 = fabs(r17761393);
        double r17761397 = r17761395 * r17761396;
        double r17761398 = r17761397 * r17761395;
        double r17761399 = r17761368 + r17761398;
        double r17761400 = r17761373 * r17761399;
        double r17761401 = sqrt(r17761400);
        double r17761402 = r17761380 * r17761401;
        double r17761403 = r17761368 + r17761368;
        double r17761404 = r17761403 * r17761373;
        double r17761405 = sqrt(r17761404);
        double r17761406 = r17761380 * r17761405;
        double r17761407 = r17761392 ? r17761402 : r17761406;
        double r17761408 = r17761383 ? r17761390 : r17761407;
        double r17761409 = r17761370 ? r17761381 : r17761408;
        return r17761409;
}

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.7
Target32.8
Herbie22.7
\[\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 < -3.200905127333683e+79

    1. Initial program 58.4

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

      \[\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/58.4

      \[\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-div58.4

      \[\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. Simplified41.8

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

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

    if -3.200905127333683e+79 < re < -5.524921853974811e-304

    1. Initial program 37.2

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

      \[\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.2

      \[\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\right)}}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\]
    7. Using strategy rm
    8. Applied sqrt-undiv30.4

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

    if -5.524921853974811e-304 < re < 2.6316271211357036e+127

    1. Initial program 20.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-cube-cbrt20.7

      \[\leadsto 0.5 \cdot \sqrt{2.0 \cdot \left(\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}}} + re\right)}\]
    4. Applied sqrt-prod20.7

      \[\leadsto 0.5 \cdot \sqrt{2.0 \cdot \left(\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}}} + re\right)}\]
    5. Simplified20.7

      \[\leadsto 0.5 \cdot \sqrt{2.0 \cdot \left(\color{blue}{\left|\sqrt[3]{re \cdot re + im \cdot im}\right|} \cdot \sqrt{\sqrt[3]{re \cdot re + im \cdot im}} + re\right)}\]
    6. Using strategy rm
    7. Applied add-sqr-sqrt20.7

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

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

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

    if 2.6316271211357036e+127 < re

    1. Initial program 53.5

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -3.200905127333683 \cdot 10^{+79}:\\ \;\;\;\;\frac{\sqrt{\left(im \cdot im\right) \cdot 2.0}}{\sqrt{-2 \cdot re}} \cdot 0.5\\ \mathbf{elif}\;re \le -5.524921853974811 \cdot 10^{-304}:\\ \;\;\;\;\sqrt{\frac{\left(im \cdot im\right) \cdot 2.0}{\sqrt{im \cdot im + re \cdot re} - re}} \cdot 0.5\\ \mathbf{elif}\;re \le 2.6316271211357036 \cdot 10^{+127}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(re + \left(\sqrt{\sqrt{\sqrt[3]{im \cdot im + re \cdot re}}} \cdot \left|\sqrt[3]{im \cdot im + re \cdot re}\right|\right) \cdot \sqrt{\sqrt{\sqrt[3]{im \cdot im + re \cdot re}}}\right)}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(re + re\right) \cdot 2.0}\\ \end{array}\]

Reproduce

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