Average Error: 39.0 → 26.3
Time: 12.7s
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 -7.240673218843522327919250789136495189333 \cdot 10^{150}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left|im\right| \cdot \frac{\left|im\right|}{-2 \cdot re}\right)}\\ \mathbf{elif}\;re \le 3.787000431377413829039638453986283883044 \cdot 10^{-283}:\\ \;\;\;\;0.5 \cdot \frac{\sqrt{2 \cdot {\left(\left|im\right|\right)}^{2}}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\\ \mathbf{elif}\;re \le 8.736784500225597746587986871686332519603 \cdot 10^{-188}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left|im\right| \cdot \frac{\left|im\right|}{im - re}\right)}\\ \mathbf{elif}\;re \le 1.153451770878403765578063868666891624253 \cdot 10^{-53}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\frac{\left|im\right|}{\sqrt{re \cdot re + im \cdot im} - re} \cdot \left|im\right|\right)}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(2 \cdot 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 -7.240673218843522327919250789136495189333 \cdot 10^{150}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left|im\right| \cdot \frac{\left|im\right|}{-2 \cdot re}\right)}\\

\mathbf{elif}\;re \le 3.787000431377413829039638453986283883044 \cdot 10^{-283}:\\
\;\;\;\;0.5 \cdot \frac{\sqrt{2 \cdot {\left(\left|im\right|\right)}^{2}}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\\

\mathbf{elif}\;re \le 8.736784500225597746587986871686332519603 \cdot 10^{-188}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left|im\right| \cdot \frac{\left|im\right|}{im - re}\right)}\\

\mathbf{elif}\;re \le 1.153451770878403765578063868666891624253 \cdot 10^{-53}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\frac{\left|im\right|}{\sqrt{re \cdot re + im \cdot im} - re} \cdot \left|im\right|\right)}\\

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

\end{array}
double f(double re, double im) {
        double r131519 = 0.5;
        double r131520 = 2.0;
        double r131521 = re;
        double r131522 = r131521 * r131521;
        double r131523 = im;
        double r131524 = r131523 * r131523;
        double r131525 = r131522 + r131524;
        double r131526 = sqrt(r131525);
        double r131527 = r131526 + r131521;
        double r131528 = r131520 * r131527;
        double r131529 = sqrt(r131528);
        double r131530 = r131519 * r131529;
        return r131530;
}

double f(double re, double im) {
        double r131531 = re;
        double r131532 = -7.240673218843522e+150;
        bool r131533 = r131531 <= r131532;
        double r131534 = 0.5;
        double r131535 = 2.0;
        double r131536 = im;
        double r131537 = fabs(r131536);
        double r131538 = -2.0;
        double r131539 = r131538 * r131531;
        double r131540 = r131537 / r131539;
        double r131541 = r131537 * r131540;
        double r131542 = r131535 * r131541;
        double r131543 = sqrt(r131542);
        double r131544 = r131534 * r131543;
        double r131545 = 3.787000431377414e-283;
        bool r131546 = r131531 <= r131545;
        double r131547 = 2.0;
        double r131548 = pow(r131537, r131547);
        double r131549 = r131535 * r131548;
        double r131550 = sqrt(r131549);
        double r131551 = r131531 * r131531;
        double r131552 = r131536 * r131536;
        double r131553 = r131551 + r131552;
        double r131554 = sqrt(r131553);
        double r131555 = r131554 - r131531;
        double r131556 = sqrt(r131555);
        double r131557 = r131550 / r131556;
        double r131558 = r131534 * r131557;
        double r131559 = 8.736784500225598e-188;
        bool r131560 = r131531 <= r131559;
        double r131561 = r131536 - r131531;
        double r131562 = r131537 / r131561;
        double r131563 = r131537 * r131562;
        double r131564 = r131535 * r131563;
        double r131565 = sqrt(r131564);
        double r131566 = r131534 * r131565;
        double r131567 = 1.1534517708784038e-53;
        bool r131568 = r131531 <= r131567;
        double r131569 = r131537 / r131555;
        double r131570 = r131569 * r131537;
        double r131571 = r131535 * r131570;
        double r131572 = sqrt(r131571);
        double r131573 = r131534 * r131572;
        double r131574 = r131547 * r131531;
        double r131575 = r131535 * r131574;
        double r131576 = sqrt(r131575);
        double r131577 = r131534 * r131576;
        double r131578 = r131568 ? r131573 : r131577;
        double r131579 = r131560 ? r131566 : r131578;
        double r131580 = r131546 ? r131558 : r131579;
        double r131581 = r131533 ? r131544 : r131580;
        return r131581;
}

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
Herbie26.3
\[\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 5 regimes
  2. if re < -7.240673218843522e+150

    1. Initial program 63.9

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

      \[\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. Simplified50.5

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \frac{\color{blue}{im \cdot im + 0}}{\sqrt{re \cdot re + im \cdot im} - re}}\]
    5. Using strategy rm
    6. Applied *-un-lft-identity50.5

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \frac{im \cdot im + 0}{\color{blue}{1 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}}}\]
    7. Applied add-sqr-sqrt50.5

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \frac{\color{blue}{\sqrt{im \cdot im + 0} \cdot \sqrt{im \cdot im + 0}}}{1 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}}\]
    8. Applied times-frac50.5

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \color{blue}{\left(\frac{\sqrt{im \cdot im + 0}}{1} \cdot \frac{\sqrt{im \cdot im + 0}}{\sqrt{re \cdot re + im \cdot im} - re}\right)}}\]
    9. Simplified50.5

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\color{blue}{\left|im\right|} \cdot \frac{\sqrt{im \cdot im + 0}}{\sqrt{re \cdot re + im \cdot im} - re}\right)}\]
    10. Simplified50.1

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

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

    if -7.240673218843522e+150 < re < 3.787000431377414e-283

    1. Initial program 39.7

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

      \[\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. Simplified30.9

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \frac{\color{blue}{im \cdot im + 0}}{\sqrt{re \cdot re + im \cdot im} - re}}\]
    5. Using strategy rm
    6. Applied *-un-lft-identity30.9

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \frac{im \cdot im + 0}{\color{blue}{1 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}}}\]
    7. Applied add-sqr-sqrt30.9

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \frac{\color{blue}{\sqrt{im \cdot im + 0} \cdot \sqrt{im \cdot im + 0}}}{1 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}}\]
    8. Applied times-frac30.9

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \color{blue}{\left(\frac{\sqrt{im \cdot im + 0}}{1} \cdot \frac{\sqrt{im \cdot im + 0}}{\sqrt{re \cdot re + im \cdot im} - re}\right)}}\]
    9. Simplified30.8

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\color{blue}{\left|im\right|} \cdot \frac{\sqrt{im \cdot im + 0}}{\sqrt{re \cdot re + im \cdot im} - re}\right)}\]
    10. Simplified28.8

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\left|im\right| \cdot \color{blue}{\frac{\left|im\right|}{\sqrt{re \cdot re + im \cdot im} - re}}\right)}\]
    11. Using strategy rm
    12. Applied associate-*r/30.9

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \color{blue}{\frac{\left|im\right| \cdot \left|im\right|}{\sqrt{re \cdot re + im \cdot im} - re}}}\]
    13. Applied associate-*r/30.9

      \[\leadsto 0.5 \cdot \sqrt{\color{blue}{\frac{2 \cdot \left(\left|im\right| \cdot \left|im\right|\right)}{\sqrt{re \cdot re + im \cdot im} - re}}}\]
    14. Applied sqrt-div29.9

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

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

    if 3.787000431377414e-283 < re < 8.736784500225598e-188

    1. Initial program 29.5

      \[0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}\]
    2. Using strategy rm
    3. Applied flip-+31.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. Simplified31.1

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \frac{\color{blue}{im \cdot im + 0}}{\sqrt{re \cdot re + im \cdot im} - re}}\]
    5. Using strategy rm
    6. Applied *-un-lft-identity31.1

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

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \frac{\color{blue}{\sqrt{im \cdot im + 0} \cdot \sqrt{im \cdot im + 0}}}{1 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}}\]
    8. Applied times-frac31.1

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

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

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\left|im\right| \cdot \color{blue}{\frac{\left|im\right|}{\sqrt{re \cdot re + im \cdot im} - re}}\right)}\]
    11. Taylor expanded around 0 35.6

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

    if 8.736784500225598e-188 < re < 1.1534517708784038e-53

    1. Initial program 18.4

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

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

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \frac{\color{blue}{im \cdot im + 0}}{\sqrt{re \cdot re + im \cdot im} - re}}\]
    5. Using strategy rm
    6. Applied *-un-lft-identity34.6

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \frac{im \cdot im + 0}{\color{blue}{1 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}}}\]
    7. Applied add-sqr-sqrt34.6

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \frac{\color{blue}{\sqrt{im \cdot im + 0} \cdot \sqrt{im \cdot im + 0}}}{1 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}}\]
    8. Applied times-frac34.6

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \color{blue}{\left(\frac{\sqrt{im \cdot im + 0}}{1} \cdot \frac{\sqrt{im \cdot im + 0}}{\sqrt{re \cdot re + im \cdot im} - re}\right)}}\]
    9. Simplified34.5

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

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\left|im\right| \cdot \color{blue}{\frac{\left|im\right|}{\sqrt{re \cdot re + im \cdot im} - re}}\right)}\]
    11. Using strategy rm
    12. Applied *-commutative34.3

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

    if 1.1534517708784038e-53 < re

    1. Initial program 37.2

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -7.240673218843522327919250789136495189333 \cdot 10^{150}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left|im\right| \cdot \frac{\left|im\right|}{-2 \cdot re}\right)}\\ \mathbf{elif}\;re \le 3.787000431377413829039638453986283883044 \cdot 10^{-283}:\\ \;\;\;\;0.5 \cdot \frac{\sqrt{2 \cdot {\left(\left|im\right|\right)}^{2}}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\\ \mathbf{elif}\;re \le 8.736784500225597746587986871686332519603 \cdot 10^{-188}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left|im\right| \cdot \frac{\left|im\right|}{im - re}\right)}\\ \mathbf{elif}\;re \le 1.153451770878403765578063868666891624253 \cdot 10^{-53}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\frac{\left|im\right|}{\sqrt{re \cdot re + im \cdot im} - re} \cdot \left|im\right|\right)}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(2 \cdot re\right)}\\ \end{array}\]

Reproduce

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