Average Error: 37.2 → 18.3
Time: 18.4s
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 -1.4891181159633834 \cdot 10^{+116}:\\ \;\;\;\;\frac{\sqrt{2.0} \cdot \left|im\right|}{\sqrt{-2 \cdot re}} \cdot 0.5\\ \mathbf{elif}\;re \le 1.3001999503965804 \cdot 10^{-165}:\\ \;\;\;\;0.5 \cdot \frac{\left|im\right|}{\frac{\sqrt{\sqrt{im \cdot im + re \cdot re} - re}}{\sqrt{2.0}}}\\ \mathbf{elif}\;re \le 8235632211164311.0:\\ \;\;\;\;0.5 \cdot e^{\log \left(\sqrt{\left(re + \sqrt{im \cdot im + re \cdot re}\right) \cdot 2.0}\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 -1.4891181159633834 \cdot 10^{+116}:\\
\;\;\;\;\frac{\sqrt{2.0} \cdot \left|im\right|}{\sqrt{-2 \cdot re}} \cdot 0.5\\

\mathbf{elif}\;re \le 1.3001999503965804 \cdot 10^{-165}:\\
\;\;\;\;0.5 \cdot \frac{\left|im\right|}{\frac{\sqrt{\sqrt{im \cdot im + re \cdot re} - re}}{\sqrt{2.0}}}\\

\mathbf{elif}\;re \le 8235632211164311.0:\\
\;\;\;\;0.5 \cdot e^{\log \left(\sqrt{\left(re + \sqrt{im \cdot im + re \cdot re}\right) \cdot 2.0}\right)}\\

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

\end{array}
double f(double re, double im) {
        double r7053559 = 0.5;
        double r7053560 = 2.0;
        double r7053561 = re;
        double r7053562 = r7053561 * r7053561;
        double r7053563 = im;
        double r7053564 = r7053563 * r7053563;
        double r7053565 = r7053562 + r7053564;
        double r7053566 = sqrt(r7053565);
        double r7053567 = r7053566 + r7053561;
        double r7053568 = r7053560 * r7053567;
        double r7053569 = sqrt(r7053568);
        double r7053570 = r7053559 * r7053569;
        return r7053570;
}

double f(double re, double im) {
        double r7053571 = re;
        double r7053572 = -1.4891181159633834e+116;
        bool r7053573 = r7053571 <= r7053572;
        double r7053574 = 2.0;
        double r7053575 = sqrt(r7053574);
        double r7053576 = im;
        double r7053577 = fabs(r7053576);
        double r7053578 = r7053575 * r7053577;
        double r7053579 = -2.0;
        double r7053580 = r7053579 * r7053571;
        double r7053581 = sqrt(r7053580);
        double r7053582 = r7053578 / r7053581;
        double r7053583 = 0.5;
        double r7053584 = r7053582 * r7053583;
        double r7053585 = 1.3001999503965804e-165;
        bool r7053586 = r7053571 <= r7053585;
        double r7053587 = r7053576 * r7053576;
        double r7053588 = r7053571 * r7053571;
        double r7053589 = r7053587 + r7053588;
        double r7053590 = sqrt(r7053589);
        double r7053591 = r7053590 - r7053571;
        double r7053592 = sqrt(r7053591);
        double r7053593 = r7053592 / r7053575;
        double r7053594 = r7053577 / r7053593;
        double r7053595 = r7053583 * r7053594;
        double r7053596 = 8235632211164311.0;
        bool r7053597 = r7053571 <= r7053596;
        double r7053598 = r7053571 + r7053590;
        double r7053599 = r7053598 * r7053574;
        double r7053600 = sqrt(r7053599);
        double r7053601 = log(r7053600);
        double r7053602 = exp(r7053601);
        double r7053603 = r7053583 * r7053602;
        double r7053604 = r7053571 + r7053571;
        double r7053605 = r7053604 * r7053574;
        double r7053606 = sqrt(r7053605);
        double r7053607 = r7053583 * r7053606;
        double r7053608 = r7053597 ? r7053603 : r7053607;
        double r7053609 = r7053586 ? r7053595 : r7053608;
        double r7053610 = r7053573 ? r7053584 : r7053609;
        return r7053610;
}

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.2
Target32.2
Herbie18.3
\[\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 < -1.4891181159633834e+116

    1. Initial program 60.7

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

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

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

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

      \[\leadsto 0.5 \cdot \frac{\color{blue}{\sqrt{\left(im \cdot im\right) \cdot 2.0}}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\]
    7. Using strategy rm
    8. Applied *-un-lft-identity44.9

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

      \[\leadsto 0.5 \cdot \frac{\sqrt{\left(im \cdot im\right) \cdot 2.0}}{\color{blue}{\sqrt{1} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im} - re}}}\]
    10. Applied sqrt-prod44.9

      \[\leadsto 0.5 \cdot \frac{\color{blue}{\sqrt{im \cdot im} \cdot \sqrt{2.0}}}{\sqrt{1} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\]
    11. Applied times-frac44.9

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

      \[\leadsto 0.5 \cdot \left(\color{blue}{\left|im\right|} \cdot \frac{\sqrt{2.0}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\right)\]
    13. Using strategy rm
    14. Applied associate-*r/43.1

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

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

    if -1.4891181159633834e+116 < re < 1.3001999503965804e-165

    1. Initial program 35.7

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

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

      \[\leadsto 0.5 \cdot \frac{\color{blue}{\sqrt{\left(im \cdot im\right) \cdot 2.0}}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\]
    7. Using strategy rm
    8. Applied *-un-lft-identity29.7

      \[\leadsto 0.5 \cdot \frac{\sqrt{\left(im \cdot im\right) \cdot 2.0}}{\sqrt{\color{blue}{1 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}}}\]
    9. Applied sqrt-prod29.7

      \[\leadsto 0.5 \cdot \frac{\sqrt{\left(im \cdot im\right) \cdot 2.0}}{\color{blue}{\sqrt{1} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im} - re}}}\]
    10. Applied sqrt-prod29.7

      \[\leadsto 0.5 \cdot \frac{\color{blue}{\sqrt{im \cdot im} \cdot \sqrt{2.0}}}{\sqrt{1} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\]
    11. Applied times-frac29.8

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

      \[\leadsto 0.5 \cdot \left(\color{blue}{\left|im\right|} \cdot \frac{\sqrt{2.0}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\right)\]
    13. Using strategy rm
    14. Applied associate-*r/23.0

      \[\leadsto 0.5 \cdot \color{blue}{\frac{\left|im\right| \cdot \sqrt{2.0}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}}\]
    15. Using strategy rm
    16. Applied associate-/l*23.1

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

    if 1.3001999503965804e-165 < re < 8235632211164311.0

    1. Initial program 15.4

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

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

    if 8235632211164311.0 < re

    1. Initial program 39.1

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -1.4891181159633834 \cdot 10^{+116}:\\ \;\;\;\;\frac{\sqrt{2.0} \cdot \left|im\right|}{\sqrt{-2 \cdot re}} \cdot 0.5\\ \mathbf{elif}\;re \le 1.3001999503965804 \cdot 10^{-165}:\\ \;\;\;\;0.5 \cdot \frac{\left|im\right|}{\frac{\sqrt{\sqrt{im \cdot im + re \cdot re} - re}}{\sqrt{2.0}}}\\ \mathbf{elif}\;re \le 8235632211164311.0:\\ \;\;\;\;0.5 \cdot e^{\log \left(\sqrt{\left(re + \sqrt{im \cdot im + re \cdot re}\right) \cdot 2.0}\right)}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(re + re\right) \cdot 2.0}\\ \end{array}\]

Reproduce

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