Average Error: 38.6 → 26.9
Time: 9.1s
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 -1.01553741283133633 \cdot 10^{107}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\ \mathbf{elif}\;re \le -1.1227336800725336 \cdot 10^{-247}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left|\sqrt[3]{re \cdot re + im \cdot im}\right| \cdot \sqrt{\sqrt[3]{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt[3]{\sqrt{re \cdot re + im \cdot im}}} - re\right)}\\ \mathbf{elif}\;re \le 3.3295675416621997 \cdot 10^{-138}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \frac{\sqrt{\left(im \cdot im\right) \cdot 2}}{\sqrt{\sqrt{re \cdot re + im \cdot im} + re}}\\ \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 -1.01553741283133633 \cdot 10^{107}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\

\mathbf{elif}\;re \le -1.1227336800725336 \cdot 10^{-247}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left|\sqrt[3]{re \cdot re + im \cdot im}\right| \cdot \sqrt{\sqrt[3]{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt[3]{\sqrt{re \cdot re + im \cdot im}}} - re\right)}\\

\mathbf{elif}\;re \le 3.3295675416621997 \cdot 10^{-138}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\

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

\end{array}
double f(double re, double im) {
        double r17692 = 0.5;
        double r17693 = 2.0;
        double r17694 = re;
        double r17695 = r17694 * r17694;
        double r17696 = im;
        double r17697 = r17696 * r17696;
        double r17698 = r17695 + r17697;
        double r17699 = sqrt(r17698);
        double r17700 = r17699 - r17694;
        double r17701 = r17693 * r17700;
        double r17702 = sqrt(r17701);
        double r17703 = r17692 * r17702;
        return r17703;
}

double f(double re, double im) {
        double r17704 = re;
        double r17705 = -1.0155374128313363e+107;
        bool r17706 = r17704 <= r17705;
        double r17707 = 0.5;
        double r17708 = 2.0;
        double r17709 = -2.0;
        double r17710 = r17709 * r17704;
        double r17711 = r17708 * r17710;
        double r17712 = sqrt(r17711);
        double r17713 = r17707 * r17712;
        double r17714 = -1.1227336800725336e-247;
        bool r17715 = r17704 <= r17714;
        double r17716 = r17704 * r17704;
        double r17717 = im;
        double r17718 = r17717 * r17717;
        double r17719 = r17716 + r17718;
        double r17720 = cbrt(r17719);
        double r17721 = fabs(r17720);
        double r17722 = sqrt(r17719);
        double r17723 = cbrt(r17722);
        double r17724 = r17723 * r17723;
        double r17725 = sqrt(r17724);
        double r17726 = r17721 * r17725;
        double r17727 = r17726 - r17704;
        double r17728 = r17708 * r17727;
        double r17729 = sqrt(r17728);
        double r17730 = r17707 * r17729;
        double r17731 = 3.3295675416622e-138;
        bool r17732 = r17704 <= r17731;
        double r17733 = r17717 - r17704;
        double r17734 = r17708 * r17733;
        double r17735 = sqrt(r17734);
        double r17736 = r17707 * r17735;
        double r17737 = r17718 * r17708;
        double r17738 = sqrt(r17737);
        double r17739 = r17722 + r17704;
        double r17740 = sqrt(r17739);
        double r17741 = r17738 / r17740;
        double r17742 = r17707 * r17741;
        double r17743 = r17732 ? r17736 : r17742;
        double r17744 = r17715 ? r17730 : r17743;
        double r17745 = r17706 ? r17713 : r17744;
        return r17745;
}

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.0155374128313363e+107

    1. Initial program 52.5

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

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

    if -1.0155374128313363e+107 < re < -1.1227336800725336e-247

    1. Initial program 19.0

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

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\sqrt{\color{blue}{\left(\sqrt[3]{re \cdot re + im \cdot im} \cdot \sqrt[3]{re \cdot re + im \cdot im}\right) \cdot \sqrt[3]{re \cdot re + im \cdot im}}} - re\right)}\]
    4. Applied sqrt-prod19.3

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\color{blue}{\sqrt{\sqrt[3]{re \cdot re + im \cdot im} \cdot \sqrt[3]{re \cdot re + im \cdot im}} \cdot \sqrt{\sqrt[3]{re \cdot re + im \cdot im}}} - re\right)}\]
    5. Simplified19.3

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\color{blue}{\left|\sqrt[3]{re \cdot re + im \cdot im}\right|} \cdot \sqrt{\sqrt[3]{re \cdot re + im \cdot im}} - re\right)}\]
    6. Using strategy rm
    7. Applied add-sqr-sqrt19.3

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\left|\sqrt[3]{re \cdot re + im \cdot im}\right| \cdot \sqrt{\sqrt[3]{\color{blue}{\sqrt{re \cdot re + im \cdot im} \cdot \sqrt{re \cdot re + im \cdot im}}}} - re\right)}\]
    8. Applied cbrt-prod19.3

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

    if -1.1227336800725336e-247 < re < 3.3295675416622e-138

    1. Initial program 31.5

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

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

    if 3.3295675416622e-138 < re

    1. Initial program 51.5

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

      \[\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. Applied associate-*r/51.5

      \[\leadsto 0.5 \cdot \sqrt{\color{blue}{\frac{2 \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-div51.6

      \[\leadsto 0.5 \cdot \color{blue}{\frac{\sqrt{2 \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. Simplified36.3

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -1.01553741283133633 \cdot 10^{107}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\ \mathbf{elif}\;re \le -1.1227336800725336 \cdot 10^{-247}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left|\sqrt[3]{re \cdot re + im \cdot im}\right| \cdot \sqrt{\sqrt[3]{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt[3]{\sqrt{re \cdot re + im \cdot im}}} - re\right)}\\ \mathbf{elif}\;re \le 3.3295675416621997 \cdot 10^{-138}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \frac{\sqrt{\left(im \cdot im\right) \cdot 2}}{\sqrt{\sqrt{re \cdot re + im \cdot im} + re}}\\ \end{array}\]

Reproduce

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