Average Error: 37.5 → 26.9
Time: 19.2s
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 -2.6219396713989246 \cdot 10^{+28}:\\ \;\;\;\;\frac{\sqrt{\left(im \cdot im\right) \cdot 2.0}}{\sqrt{\sqrt{im \cdot im + re \cdot re} - re}} \cdot 0.5\\ \mathbf{elif}\;re \le -3.0560575984185278 \cdot 10^{-28}:\\ \;\;\;\;\sqrt{2.0 \cdot \left(im + re\right)} \cdot 0.5\\ \mathbf{elif}\;re \le -2.4751289839842727 \cdot 10^{-197}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \frac{im \cdot im}{\sqrt{im \cdot im + re \cdot re} - re}}\\ \mathbf{elif}\;re \le -1.0467551994962917 \cdot 10^{-267}:\\ \;\;\;\;\sqrt{2.0 \cdot \left(im + re\right)} \cdot 0.5\\ \mathbf{elif}\;re \le 9.007455771870733 \cdot 10^{+76}:\\ \;\;\;\;0.5 \cdot \left(\sqrt{\sqrt{\left(re + \sqrt{im \cdot im + re \cdot re}\right) \cdot 2.0}} \cdot \sqrt{\sqrt{\left(re + \sqrt{im \cdot im + re \cdot re}\right) \cdot 2.0}}\right)\\ \mathbf{else}:\\ \;\;\;\;\sqrt{\left(re + re\right) \cdot 2.0} \cdot 0.5\\ \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 -2.6219396713989246 \cdot 10^{+28}:\\
\;\;\;\;\frac{\sqrt{\left(im \cdot im\right) \cdot 2.0}}{\sqrt{\sqrt{im \cdot im + re \cdot re} - re}} \cdot 0.5\\

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

\mathbf{elif}\;re \le -2.4751289839842727 \cdot 10^{-197}:\\
\;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \frac{im \cdot im}{\sqrt{im \cdot im + re \cdot re} - re}}\\

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

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

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

\end{array}
double f(double re, double im) {
        double r8754962 = 0.5;
        double r8754963 = 2.0;
        double r8754964 = re;
        double r8754965 = r8754964 * r8754964;
        double r8754966 = im;
        double r8754967 = r8754966 * r8754966;
        double r8754968 = r8754965 + r8754967;
        double r8754969 = sqrt(r8754968);
        double r8754970 = r8754969 + r8754964;
        double r8754971 = r8754963 * r8754970;
        double r8754972 = sqrt(r8754971);
        double r8754973 = r8754962 * r8754972;
        return r8754973;
}

double f(double re, double im) {
        double r8754974 = re;
        double r8754975 = -2.6219396713989246e+28;
        bool r8754976 = r8754974 <= r8754975;
        double r8754977 = im;
        double r8754978 = r8754977 * r8754977;
        double r8754979 = 2.0;
        double r8754980 = r8754978 * r8754979;
        double r8754981 = sqrt(r8754980);
        double r8754982 = r8754974 * r8754974;
        double r8754983 = r8754978 + r8754982;
        double r8754984 = sqrt(r8754983);
        double r8754985 = r8754984 - r8754974;
        double r8754986 = sqrt(r8754985);
        double r8754987 = r8754981 / r8754986;
        double r8754988 = 0.5;
        double r8754989 = r8754987 * r8754988;
        double r8754990 = -3.0560575984185278e-28;
        bool r8754991 = r8754974 <= r8754990;
        double r8754992 = r8754977 + r8754974;
        double r8754993 = r8754979 * r8754992;
        double r8754994 = sqrt(r8754993);
        double r8754995 = r8754994 * r8754988;
        double r8754996 = -2.4751289839842727e-197;
        bool r8754997 = r8754974 <= r8754996;
        double r8754998 = r8754978 / r8754985;
        double r8754999 = r8754979 * r8754998;
        double r8755000 = sqrt(r8754999);
        double r8755001 = r8754988 * r8755000;
        double r8755002 = -1.0467551994962917e-267;
        bool r8755003 = r8754974 <= r8755002;
        double r8755004 = 9.007455771870733e+76;
        bool r8755005 = r8754974 <= r8755004;
        double r8755006 = r8754974 + r8754984;
        double r8755007 = r8755006 * r8754979;
        double r8755008 = sqrt(r8755007);
        double r8755009 = sqrt(r8755008);
        double r8755010 = r8755009 * r8755009;
        double r8755011 = r8754988 * r8755010;
        double r8755012 = r8754974 + r8754974;
        double r8755013 = r8755012 * r8754979;
        double r8755014 = sqrt(r8755013);
        double r8755015 = r8755014 * r8754988;
        double r8755016 = r8755005 ? r8755011 : r8755015;
        double r8755017 = r8755003 ? r8754995 : r8755016;
        double r8755018 = r8754997 ? r8755001 : r8755017;
        double r8755019 = r8754991 ? r8754995 : r8755018;
        double r8755020 = r8754976 ? r8754989 : r8755019;
        return r8755020;
}

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.7
Herbie26.9
\[\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 5 regimes
  2. if re < -2.6219396713989246e+28

    1. Initial program 56.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-+56.5

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

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

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

      \[\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}}\]

    if -2.6219396713989246e+28 < re < -3.0560575984185278e-28 or -2.4751289839842727e-197 < re < -1.0467551994962917e-267

    1. Initial program 38.3

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

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

    if -3.0560575984185278e-28 < re < -2.4751289839842727e-197

    1. Initial program 33.3

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

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

    if -1.0467551994962917e-267 < re < 9.007455771870733e+76

    1. Initial program 21.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-sqr-sqrt21.7

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

    if 9.007455771870733e+76 < re

    1. Initial program 45.8

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -2.6219396713989246 \cdot 10^{+28}:\\ \;\;\;\;\frac{\sqrt{\left(im \cdot im\right) \cdot 2.0}}{\sqrt{\sqrt{im \cdot im + re \cdot re} - re}} \cdot 0.5\\ \mathbf{elif}\;re \le -3.0560575984185278 \cdot 10^{-28}:\\ \;\;\;\;\sqrt{2.0 \cdot \left(im + re\right)} \cdot 0.5\\ \mathbf{elif}\;re \le -2.4751289839842727 \cdot 10^{-197}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \frac{im \cdot im}{\sqrt{im \cdot im + re \cdot re} - re}}\\ \mathbf{elif}\;re \le -1.0467551994962917 \cdot 10^{-267}:\\ \;\;\;\;\sqrt{2.0 \cdot \left(im + re\right)} \cdot 0.5\\ \mathbf{elif}\;re \le 9.007455771870733 \cdot 10^{+76}:\\ \;\;\;\;0.5 \cdot \left(\sqrt{\sqrt{\left(re + \sqrt{im \cdot im + re \cdot re}\right) \cdot 2.0}} \cdot \sqrt{\sqrt{\left(re + \sqrt{im \cdot im + re \cdot re}\right) \cdot 2.0}}\right)\\ \mathbf{else}:\\ \;\;\;\;\sqrt{\left(re + re\right) \cdot 2.0} \cdot 0.5\\ \end{array}\]

Reproduce

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