Average Error: 37.7 → 26.4
Time: 34.8s
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.9269100752906168 \cdot 10^{+118}:\\ \;\;\;\;\sqrt{\left(-2 \cdot re\right) \cdot 2.0} \cdot 0.5\\ \mathbf{elif}\;re \le 7.868345022022993 \cdot 10^{-278}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{\sqrt[3]{\sqrt[3]{im \cdot im + re \cdot re}}} \cdot \left(\sqrt{\sqrt[3]{\sqrt[3]{im \cdot im + re \cdot re} \cdot \sqrt[3]{im \cdot im + re \cdot re}}} \cdot \left|\sqrt[3]{im \cdot im + re \cdot re}\right|\right) - re\right)}\\ \mathbf{elif}\;re \le 1.2200692986423622 \cdot 10^{-144}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(im - re\right)}\\ \mathbf{else}:\\ \;\;\;\;\frac{\sqrt{\left(im \cdot im\right) \cdot 2.0}}{\sqrt{\sqrt{im \cdot im + re \cdot re} + re}} \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 -1.9269100752906168 \cdot 10^{+118}:\\
\;\;\;\;\sqrt{\left(-2 \cdot re\right) \cdot 2.0} \cdot 0.5\\

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

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

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

\end{array}
double f(double re, double im) {
        double r1581085 = 0.5;
        double r1581086 = 2.0;
        double r1581087 = re;
        double r1581088 = r1581087 * r1581087;
        double r1581089 = im;
        double r1581090 = r1581089 * r1581089;
        double r1581091 = r1581088 + r1581090;
        double r1581092 = sqrt(r1581091);
        double r1581093 = r1581092 - r1581087;
        double r1581094 = r1581086 * r1581093;
        double r1581095 = sqrt(r1581094);
        double r1581096 = r1581085 * r1581095;
        return r1581096;
}

double f(double re, double im) {
        double r1581097 = re;
        double r1581098 = -1.9269100752906168e+118;
        bool r1581099 = r1581097 <= r1581098;
        double r1581100 = -2.0;
        double r1581101 = r1581100 * r1581097;
        double r1581102 = 2.0;
        double r1581103 = r1581101 * r1581102;
        double r1581104 = sqrt(r1581103);
        double r1581105 = 0.5;
        double r1581106 = r1581104 * r1581105;
        double r1581107 = 7.868345022022993e-278;
        bool r1581108 = r1581097 <= r1581107;
        double r1581109 = im;
        double r1581110 = r1581109 * r1581109;
        double r1581111 = r1581097 * r1581097;
        double r1581112 = r1581110 + r1581111;
        double r1581113 = cbrt(r1581112);
        double r1581114 = cbrt(r1581113);
        double r1581115 = sqrt(r1581114);
        double r1581116 = r1581113 * r1581113;
        double r1581117 = cbrt(r1581116);
        double r1581118 = sqrt(r1581117);
        double r1581119 = fabs(r1581113);
        double r1581120 = r1581118 * r1581119;
        double r1581121 = r1581115 * r1581120;
        double r1581122 = r1581121 - r1581097;
        double r1581123 = r1581102 * r1581122;
        double r1581124 = sqrt(r1581123);
        double r1581125 = r1581105 * r1581124;
        double r1581126 = 1.2200692986423622e-144;
        bool r1581127 = r1581097 <= r1581126;
        double r1581128 = r1581109 - r1581097;
        double r1581129 = r1581102 * r1581128;
        double r1581130 = sqrt(r1581129);
        double r1581131 = r1581105 * r1581130;
        double r1581132 = r1581110 * r1581102;
        double r1581133 = sqrt(r1581132);
        double r1581134 = sqrt(r1581112);
        double r1581135 = r1581134 + r1581097;
        double r1581136 = sqrt(r1581135);
        double r1581137 = r1581133 / r1581136;
        double r1581138 = r1581137 * r1581105;
        double r1581139 = r1581127 ? r1581131 : r1581138;
        double r1581140 = r1581108 ? r1581125 : r1581139;
        double r1581141 = r1581099 ? r1581106 : r1581140;
        return r1581141;
}

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.9269100752906168e+118

    1. Initial program 51.9

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

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

    if -1.9269100752906168e+118 < re < 7.868345022022993e-278

    1. Initial program 20.5

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

      \[\leadsto 0.5 \cdot \sqrt{2.0 \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-prod20.8

      \[\leadsto 0.5 \cdot \sqrt{2.0 \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. Simplified20.8

      \[\leadsto 0.5 \cdot \sqrt{2.0 \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-cube-cbrt20.8

      \[\leadsto 0.5 \cdot \sqrt{2.0 \cdot \left(\left|\sqrt[3]{re \cdot re + im \cdot im}\right| \cdot \sqrt{\sqrt[3]{\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)}\]
    8. Applied cbrt-prod20.9

      \[\leadsto 0.5 \cdot \sqrt{2.0 \cdot \left(\left|\sqrt[3]{re \cdot re + im \cdot im}\right| \cdot \sqrt{\color{blue}{\sqrt[3]{\sqrt[3]{re \cdot re + im \cdot im} \cdot \sqrt[3]{re \cdot re + im \cdot im}} \cdot \sqrt[3]{\sqrt[3]{re \cdot re + im \cdot im}}}} - re\right)}\]
    9. Applied sqrt-prod20.9

      \[\leadsto 0.5 \cdot \sqrt{2.0 \cdot \left(\left|\sqrt[3]{re \cdot re + im \cdot im}\right| \cdot \color{blue}{\left(\sqrt{\sqrt[3]{\sqrt[3]{re \cdot re + im \cdot im} \cdot \sqrt[3]{re \cdot re + im \cdot im}}} \cdot \sqrt{\sqrt[3]{\sqrt[3]{re \cdot re + im \cdot im}}}\right)} - re\right)}\]
    10. Applied associate-*r*20.9

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

    if 7.868345022022993e-278 < re < 1.2200692986423622e-144

    1. Initial program 30.0

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

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

    if 1.2200692986423622e-144 < re

    1. Initial program 50.4

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

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

      \[\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-div50.4

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

      \[\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}}\]
  3. Recombined 4 regimes into one program.
  4. Final simplification26.4

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -1.9269100752906168 \cdot 10^{+118}:\\ \;\;\;\;\sqrt{\left(-2 \cdot re\right) \cdot 2.0} \cdot 0.5\\ \mathbf{elif}\;re \le 7.868345022022993 \cdot 10^{-278}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{\sqrt[3]{\sqrt[3]{im \cdot im + re \cdot re}}} \cdot \left(\sqrt{\sqrt[3]{\sqrt[3]{im \cdot im + re \cdot re} \cdot \sqrt[3]{im \cdot im + re \cdot re}}} \cdot \left|\sqrt[3]{im \cdot im + re \cdot re}\right|\right) - re\right)}\\ \mathbf{elif}\;re \le 1.2200692986423622 \cdot 10^{-144}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(im - re\right)}\\ \mathbf{else}:\\ \;\;\;\;\frac{\sqrt{\left(im \cdot im\right) \cdot 2.0}}{\sqrt{\sqrt{im \cdot im + re \cdot re} + re}} \cdot 0.5\\ \end{array}\]

Reproduce

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