Average Error: 39.0 → 20.9
Time: 18.6s
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 -6.4397722734901768 \cdot 10^{138}:\\ \;\;\;\;0.5 \cdot \frac{\sqrt{2} \cdot \left|im\right|}{\sqrt{-2 \cdot re}}\\ \mathbf{elif}\;re \le 1.73514039595624235 \cdot 10^{-43}:\\ \;\;\;\;0.5 \cdot \frac{\left(\sqrt[3]{\sqrt{2}} \cdot \sqrt[3]{\sqrt{2}}\right) \cdot \left(\sqrt[3]{\sqrt{2}} \cdot \left|im\right|\right)}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\\ \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 -6.4397722734901768 \cdot 10^{138}:\\
\;\;\;\;0.5 \cdot \frac{\sqrt{2} \cdot \left|im\right|}{\sqrt{-2 \cdot re}}\\

\mathbf{elif}\;re \le 1.73514039595624235 \cdot 10^{-43}:\\
\;\;\;\;0.5 \cdot \frac{\left(\sqrt[3]{\sqrt{2}} \cdot \sqrt[3]{\sqrt{2}}\right) \cdot \left(\sqrt[3]{\sqrt{2}} \cdot \left|im\right|\right)}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\\

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

\end{array}
double f(double re, double im) {
        double r185428 = 0.5;
        double r185429 = 2.0;
        double r185430 = re;
        double r185431 = r185430 * r185430;
        double r185432 = im;
        double r185433 = r185432 * r185432;
        double r185434 = r185431 + r185433;
        double r185435 = sqrt(r185434);
        double r185436 = r185435 + r185430;
        double r185437 = r185429 * r185436;
        double r185438 = sqrt(r185437);
        double r185439 = r185428 * r185438;
        return r185439;
}

double f(double re, double im) {
        double r185440 = re;
        double r185441 = -6.439772273490177e+138;
        bool r185442 = r185440 <= r185441;
        double r185443 = 0.5;
        double r185444 = 2.0;
        double r185445 = sqrt(r185444);
        double r185446 = im;
        double r185447 = fabs(r185446);
        double r185448 = r185445 * r185447;
        double r185449 = -2.0;
        double r185450 = r185449 * r185440;
        double r185451 = sqrt(r185450);
        double r185452 = r185448 / r185451;
        double r185453 = r185443 * r185452;
        double r185454 = 1.7351403959562423e-43;
        bool r185455 = r185440 <= r185454;
        double r185456 = cbrt(r185445);
        double r185457 = r185456 * r185456;
        double r185458 = r185456 * r185447;
        double r185459 = r185457 * r185458;
        double r185460 = r185440 * r185440;
        double r185461 = r185446 * r185446;
        double r185462 = r185460 + r185461;
        double r185463 = sqrt(r185462);
        double r185464 = r185463 - r185440;
        double r185465 = sqrt(r185464);
        double r185466 = r185459 / r185465;
        double r185467 = r185443 * r185466;
        double r185468 = r185440 + r185440;
        double r185469 = r185444 * r185468;
        double r185470 = sqrt(r185469);
        double r185471 = r185443 * r185470;
        double r185472 = r185455 ? r185467 : r185471;
        double r185473 = r185442 ? r185453 : r185472;
        return r185473;
}

Error

Bits error versus re

Bits error versus im

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original39.0
Target33.9
Herbie20.9
\[\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 < -6.439772273490177e+138

    1. Initial program 63.1

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

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

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

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

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

      \[\leadsto 0.5 \cdot \frac{\color{blue}{\sqrt{2} \cdot \sqrt{im \cdot im + 0}}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\]
    9. Simplified46.8

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

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

    if -6.439772273490177e+138 < re < 1.7351403959562423e-43

    1. Initial program 33.7

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

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

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

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

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

      \[\leadsto 0.5 \cdot \frac{\color{blue}{\sqrt{2} \cdot \sqrt{im \cdot im + 0}}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\]
    9. Simplified25.7

      \[\leadsto 0.5 \cdot \frac{\sqrt{2} \cdot \color{blue}{\left|im\right|}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\]
    10. Using strategy rm
    11. Applied add-cube-cbrt25.7

      \[\leadsto 0.5 \cdot \frac{\color{blue}{\left(\left(\sqrt[3]{\sqrt{2}} \cdot \sqrt[3]{\sqrt{2}}\right) \cdot \sqrt[3]{\sqrt{2}}\right)} \cdot \left|im\right|}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\]
    12. Applied associate-*l*25.7

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

    if 1.7351403959562423e-43 < re

    1. Initial program 37.8

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -6.4397722734901768 \cdot 10^{138}:\\ \;\;\;\;0.5 \cdot \frac{\sqrt{2} \cdot \left|im\right|}{\sqrt{-2 \cdot re}}\\ \mathbf{elif}\;re \le 1.73514039595624235 \cdot 10^{-43}:\\ \;\;\;\;0.5 \cdot \frac{\left(\sqrt[3]{\sqrt{2}} \cdot \sqrt[3]{\sqrt{2}}\right) \cdot \left(\sqrt[3]{\sqrt{2}} \cdot \left|im\right|\right)}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(re + re\right)}\\ \end{array}\]

Reproduce

herbie shell --seed 2019199 
(FPCore (re im)
  :name "math.sqrt on complex, real part"

  :herbie-target
  (if (< re 0.0) (* 0.5 (* (sqrt 2.0) (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)))))