Average Error: 37.5 → 25.4
Time: 15.9s
Precision: 64
\[0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}\]
\[\begin{array}{l} \mathbf{if}\;\sqrt{\left(re + \sqrt{im \cdot im + re \cdot re}\right) \cdot 2.0} \le 0.0:\\ \;\;\;\;\sqrt{2.0 \cdot \frac{im \cdot im}{\sqrt{im \cdot im + re \cdot re} - re}} \cdot 0.5\\ \mathbf{elif}\;\sqrt{\left(re + \sqrt{im \cdot im + re \cdot re}\right) \cdot 2.0} \le 1.2368170361048602 \cdot 10^{-84}:\\ \;\;\;\;\sqrt{2.0 \cdot \left(re + re\right)} \cdot 0.5\\ \mathbf{elif}\;\sqrt{\left(re + \sqrt{im \cdot im + re \cdot re}\right) \cdot 2.0} \le 1.1723558459928398 \cdot 10^{+77}:\\ \;\;\;\;\sqrt{\left(re + \sqrt{im \cdot im + re \cdot re}\right) \cdot 2.0} \cdot 0.5\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(re + im\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}\;\sqrt{\left(re + \sqrt{im \cdot im + re \cdot re}\right) \cdot 2.0} \le 0.0:\\
\;\;\;\;\sqrt{2.0 \cdot \frac{im \cdot im}{\sqrt{im \cdot im + re \cdot re} - re}} \cdot 0.5\\

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

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

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

\end{array}
double f(double re, double im) {
        double r5729424 = 0.5;
        double r5729425 = 2.0;
        double r5729426 = re;
        double r5729427 = r5729426 * r5729426;
        double r5729428 = im;
        double r5729429 = r5729428 * r5729428;
        double r5729430 = r5729427 + r5729429;
        double r5729431 = sqrt(r5729430);
        double r5729432 = r5729431 + r5729426;
        double r5729433 = r5729425 * r5729432;
        double r5729434 = sqrt(r5729433);
        double r5729435 = r5729424 * r5729434;
        return r5729435;
}

double f(double re, double im) {
        double r5729436 = re;
        double r5729437 = im;
        double r5729438 = r5729437 * r5729437;
        double r5729439 = r5729436 * r5729436;
        double r5729440 = r5729438 + r5729439;
        double r5729441 = sqrt(r5729440);
        double r5729442 = r5729436 + r5729441;
        double r5729443 = 2.0;
        double r5729444 = r5729442 * r5729443;
        double r5729445 = sqrt(r5729444);
        double r5729446 = 0.0;
        bool r5729447 = r5729445 <= r5729446;
        double r5729448 = r5729441 - r5729436;
        double r5729449 = r5729438 / r5729448;
        double r5729450 = r5729443 * r5729449;
        double r5729451 = sqrt(r5729450);
        double r5729452 = 0.5;
        double r5729453 = r5729451 * r5729452;
        double r5729454 = 1.2368170361048602e-84;
        bool r5729455 = r5729445 <= r5729454;
        double r5729456 = r5729436 + r5729436;
        double r5729457 = r5729443 * r5729456;
        double r5729458 = sqrt(r5729457);
        double r5729459 = r5729458 * r5729452;
        double r5729460 = 1.1723558459928398e+77;
        bool r5729461 = r5729445 <= r5729460;
        double r5729462 = r5729445 * r5729452;
        double r5729463 = r5729436 + r5729437;
        double r5729464 = r5729463 * r5729443;
        double r5729465 = sqrt(r5729464);
        double r5729466 = r5729452 * r5729465;
        double r5729467 = r5729461 ? r5729462 : r5729466;
        double r5729468 = r5729455 ? r5729459 : r5729467;
        double r5729469 = r5729447 ? r5729453 : r5729468;
        return r5729469;
}

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.8
Herbie25.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 4 regimes
  2. if (sqrt (* 2.0 (+ (sqrt (+ (* re re) (* im im))) re))) < 0.0

    1. Initial program 58.1

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

      \[\leadsto 0.5 \cdot \sqrt{2.0 \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-prod60.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)}\]
    5. Using strategy rm
    6. Applied flip-+60.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}}}\]
    7. Simplified32.3

      \[\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}}\]
    8. Simplified32.3

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

    if 0.0 < (sqrt (* 2.0 (+ (sqrt (+ (* re re) (* im im))) re))) < 1.2368170361048602e-84

    1. Initial program 55.1

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

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

    if 1.2368170361048602e-84 < (sqrt (* 2.0 (+ (sqrt (+ (* re re) (* im im))) re))) < 1.1723558459928398e+77

    1. Initial program 0.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-sqr-sqrt0.9

      \[\leadsto 0.5 \cdot \sqrt{2.0 \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-prod1.0

      \[\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)}\]
    5. Using strategy rm
    6. Applied sqrt-unprod0.9

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

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

    if 1.1723558459928398e+77 < (sqrt (* 2.0 (+ (sqrt (+ (* re re) (* im im))) re)))

    1. Initial program 61.6

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

      \[\leadsto 0.5 \cdot \sqrt{2.0 \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-prod61.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)}\]
    5. Taylor expanded around 0 43.4

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;\sqrt{\left(re + \sqrt{im \cdot im + re \cdot re}\right) \cdot 2.0} \le 0.0:\\ \;\;\;\;\sqrt{2.0 \cdot \frac{im \cdot im}{\sqrt{im \cdot im + re \cdot re} - re}} \cdot 0.5\\ \mathbf{elif}\;\sqrt{\left(re + \sqrt{im \cdot im + re \cdot re}\right) \cdot 2.0} \le 1.2368170361048602 \cdot 10^{-84}:\\ \;\;\;\;\sqrt{2.0 \cdot \left(re + re\right)} \cdot 0.5\\ \mathbf{elif}\;\sqrt{\left(re + \sqrt{im \cdot im + re \cdot re}\right) \cdot 2.0} \le 1.1723558459928398 \cdot 10^{+77}:\\ \;\;\;\;\sqrt{\left(re + \sqrt{im \cdot im + re \cdot re}\right) \cdot 2.0} \cdot 0.5\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(re + im\right) \cdot 2.0}\\ \end{array}\]

Reproduce

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