Average Error: 38.0 → 31.4
Time: 27.6s
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.9126520588893617 \cdot 10^{+89}:\\ \;\;\;\;\sqrt{\left(-2 \cdot re\right) \cdot 2.0} \cdot 0.5\\ \mathbf{elif}\;re \le -8.269885248202767 \cdot 10^{-244}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{im \cdot im + re \cdot re} - re\right)}\\ \mathbf{elif}\;re \le 1.3559823755120713 \cdot 10^{-164}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(im - re\right) \cdot 2.0}\\ \mathbf{elif}\;re \le 1.7047961881634492 \cdot 10^{-13}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{im \cdot im + re \cdot re} - re\right)}\\ \mathbf{elif}\;re \le 1.203926899582945 \cdot 10^{+51}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(im - re\right) \cdot 2.0}\\ \mathbf{else}:\\ \;\;\;\;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.9126520588893617 \cdot 10^{+89}:\\
\;\;\;\;\sqrt{\left(-2 \cdot re\right) \cdot 2.0} \cdot 0.5\\

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

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

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

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

\mathbf{else}:\\
\;\;\;\;0\\

\end{array}
double f(double re, double im) {
        double r888900 = 0.5;
        double r888901 = 2.0;
        double r888902 = re;
        double r888903 = r888902 * r888902;
        double r888904 = im;
        double r888905 = r888904 * r888904;
        double r888906 = r888903 + r888905;
        double r888907 = sqrt(r888906);
        double r888908 = r888907 - r888902;
        double r888909 = r888901 * r888908;
        double r888910 = sqrt(r888909);
        double r888911 = r888900 * r888910;
        return r888911;
}

double f(double re, double im) {
        double r888912 = re;
        double r888913 = -1.9126520588893617e+89;
        bool r888914 = r888912 <= r888913;
        double r888915 = -2.0;
        double r888916 = r888915 * r888912;
        double r888917 = 2.0;
        double r888918 = r888916 * r888917;
        double r888919 = sqrt(r888918);
        double r888920 = 0.5;
        double r888921 = r888919 * r888920;
        double r888922 = -8.269885248202767e-244;
        bool r888923 = r888912 <= r888922;
        double r888924 = im;
        double r888925 = r888924 * r888924;
        double r888926 = r888912 * r888912;
        double r888927 = r888925 + r888926;
        double r888928 = sqrt(r888927);
        double r888929 = r888928 - r888912;
        double r888930 = r888917 * r888929;
        double r888931 = sqrt(r888930);
        double r888932 = r888920 * r888931;
        double r888933 = 1.3559823755120713e-164;
        bool r888934 = r888912 <= r888933;
        double r888935 = r888924 - r888912;
        double r888936 = r888935 * r888917;
        double r888937 = sqrt(r888936);
        double r888938 = r888920 * r888937;
        double r888939 = 1.7047961881634492e-13;
        bool r888940 = r888912 <= r888939;
        double r888941 = 1.203926899582945e+51;
        bool r888942 = r888912 <= r888941;
        double r888943 = 0.0;
        double r888944 = r888942 ? r888938 : r888943;
        double r888945 = r888940 ? r888932 : r888944;
        double r888946 = r888934 ? r888938 : r888945;
        double r888947 = r888923 ? r888932 : r888946;
        double r888948 = r888914 ? r888921 : r888947;
        return r888948;
}

Error

Bits error versus re

Bits error versus im

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Split input into 4 regimes
  2. if re < -1.9126520588893617e+89

    1. Initial program 47.6

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

      \[\leadsto 0.5 \cdot \sqrt{2.0 \cdot \left(\color{blue}{\sqrt{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im}}} - re\right)}\]
    4. Using strategy rm
    5. Applied add-sqr-sqrt47.6

      \[\leadsto 0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{\color{blue}{\sqrt{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im}}}} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im}} - re\right)}\]
    6. Applied sqrt-prod47.6

      \[\leadsto 0.5 \cdot \sqrt{2.0 \cdot \left(\color{blue}{\left(\sqrt{\sqrt{\sqrt{re \cdot re + im \cdot im}}} \cdot \sqrt{\sqrt{\sqrt{re \cdot re + im \cdot im}}}\right)} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im}} - re\right)}\]
    7. Applied associate-*l*47.6

      \[\leadsto 0.5 \cdot \sqrt{2.0 \cdot \left(\color{blue}{\sqrt{\sqrt{\sqrt{re \cdot re + im \cdot im}}} \cdot \left(\sqrt{\sqrt{\sqrt{re \cdot re + im \cdot im}}} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im}}\right)} - re\right)}\]
    8. Taylor expanded around -inf 10.8

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

    if -1.9126520588893617e+89 < re < -8.269885248202767e-244 or 1.3559823755120713e-164 < re < 1.7047961881634492e-13

    1. Initial program 24.8

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

    if -8.269885248202767e-244 < re < 1.3559823755120713e-164 or 1.7047961881634492e-13 < re < 1.203926899582945e+51

    1. Initial program 33.7

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

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

    if 1.203926899582945e+51 < re

    1. Initial program 58.3

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

      \[\leadsto 0.5 \cdot \sqrt{2.0 \cdot \color{blue}{0}}\]
  3. Recombined 4 regimes into one program.
  4. Final simplification31.4

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -1.9126520588893617 \cdot 10^{+89}:\\ \;\;\;\;\sqrt{\left(-2 \cdot re\right) \cdot 2.0} \cdot 0.5\\ \mathbf{elif}\;re \le -8.269885248202767 \cdot 10^{-244}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{im \cdot im + re \cdot re} - re\right)}\\ \mathbf{elif}\;re \le 1.3559823755120713 \cdot 10^{-164}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(im - re\right) \cdot 2.0}\\ \mathbf{elif}\;re \le 1.7047961881634492 \cdot 10^{-13}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{im \cdot im + re \cdot re} - re\right)}\\ \mathbf{elif}\;re \le 1.203926899582945 \cdot 10^{+51}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(im - re\right) \cdot 2.0}\\ \mathbf{else}:\\ \;\;\;\;0\\ \end{array}\]

Reproduce

herbie shell --seed 2019120 
(FPCore (re im)
  :name "math.sqrt on complex, imaginary part, im greater than 0 branch"
  (* 0.5 (sqrt (* 2.0 (- (sqrt (+ (* re re) (* im im))) re)))))