Average Error: 37.1 → 23.2
Time: 28.3s
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 -6.372928415220732 \cdot 10^{+77}:\\ \;\;\;\;\frac{\sqrt{\left(im \cdot im\right) \cdot 2.0}}{\sqrt{-2 \cdot re}} \cdot 0.5\\ \mathbf{elif}\;re \le -250805254296428.34:\\ \;\;\;\;\frac{\sqrt{2.0} \cdot \left(-im\right)}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}} \cdot 0.5\\ \mathbf{elif}\;re \le 5.6246880270826 \cdot 10^{+124}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(re + \sqrt{re \cdot re + im \cdot im}\right) \cdot 2.0}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{re \cdot 4.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 -6.372928415220732 \cdot 10^{+77}:\\
\;\;\;\;\frac{\sqrt{\left(im \cdot im\right) \cdot 2.0}}{\sqrt{-2 \cdot re}} \cdot 0.5\\

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

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

\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{re \cdot 4.0}\\

\end{array}
double f(double re, double im) {
        double r51629672 = 0.5;
        double r51629673 = 2.0;
        double r51629674 = re;
        double r51629675 = r51629674 * r51629674;
        double r51629676 = im;
        double r51629677 = r51629676 * r51629676;
        double r51629678 = r51629675 + r51629677;
        double r51629679 = sqrt(r51629678);
        double r51629680 = r51629679 + r51629674;
        double r51629681 = r51629673 * r51629680;
        double r51629682 = sqrt(r51629681);
        double r51629683 = r51629672 * r51629682;
        return r51629683;
}

double f(double re, double im) {
        double r51629684 = re;
        double r51629685 = -6.372928415220732e+77;
        bool r51629686 = r51629684 <= r51629685;
        double r51629687 = im;
        double r51629688 = r51629687 * r51629687;
        double r51629689 = 2.0;
        double r51629690 = r51629688 * r51629689;
        double r51629691 = sqrt(r51629690);
        double r51629692 = -2.0;
        double r51629693 = r51629692 * r51629684;
        double r51629694 = sqrt(r51629693);
        double r51629695 = r51629691 / r51629694;
        double r51629696 = 0.5;
        double r51629697 = r51629695 * r51629696;
        double r51629698 = -250805254296428.34;
        bool r51629699 = r51629684 <= r51629698;
        double r51629700 = sqrt(r51629689);
        double r51629701 = -r51629687;
        double r51629702 = r51629700 * r51629701;
        double r51629703 = r51629684 * r51629684;
        double r51629704 = r51629703 + r51629688;
        double r51629705 = sqrt(r51629704);
        double r51629706 = r51629705 - r51629684;
        double r51629707 = sqrt(r51629706);
        double r51629708 = r51629702 / r51629707;
        double r51629709 = r51629708 * r51629696;
        double r51629710 = 5.6246880270826e+124;
        bool r51629711 = r51629684 <= r51629710;
        double r51629712 = r51629684 + r51629705;
        double r51629713 = r51629712 * r51629689;
        double r51629714 = sqrt(r51629713);
        double r51629715 = r51629696 * r51629714;
        double r51629716 = 4.0;
        double r51629717 = r51629684 * r51629716;
        double r51629718 = sqrt(r51629717);
        double r51629719 = r51629696 * r51629718;
        double r51629720 = r51629711 ? r51629715 : r51629719;
        double r51629721 = r51629699 ? r51629709 : r51629720;
        double r51629722 = r51629686 ? r51629697 : r51629721;
        return r51629722;
}

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.1
Target32.5
Herbie23.2
\[\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 < -6.372928415220732e+77

    1. Initial program 58.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-+58.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/58.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-div58.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. Simplified42.2

      \[\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 23.3

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

    if -6.372928415220732e+77 < re < -250805254296428.34

    1. Initial program 46.9

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

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

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

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

      \[\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 36.4

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

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

    if -250805254296428.34 < re < 5.6246880270826e+124

    1. Initial program 25.6

      \[0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}\]
    2. Using strategy rm
    3. Applied *-un-lft-identity25.6

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

    if 5.6246880270826e+124 < re

    1. Initial program 54.5

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

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

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

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

      \[\leadsto 0.5 \cdot \color{blue}{\sqrt{\frac{2.0 \cdot \left(im \cdot im\right)}{\sqrt{re \cdot re + im \cdot im} - re}}}\]
    9. Taylor expanded around 0 8.2

      \[\leadsto 0.5 \cdot \sqrt{\color{blue}{4.0 \cdot re}}\]
  3. Recombined 4 regimes into one program.
  4. Final simplification23.2

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -6.372928415220732 \cdot 10^{+77}:\\ \;\;\;\;\frac{\sqrt{\left(im \cdot im\right) \cdot 2.0}}{\sqrt{-2 \cdot re}} \cdot 0.5\\ \mathbf{elif}\;re \le -250805254296428.34:\\ \;\;\;\;\frac{\sqrt{2.0} \cdot \left(-im\right)}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}} \cdot 0.5\\ \mathbf{elif}\;re \le 5.6246880270826 \cdot 10^{+124}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(re + \sqrt{re \cdot re + im \cdot im}\right) \cdot 2.0}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{re \cdot 4.0}\\ \end{array}\]

Reproduce

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