Average Error: 37.7 → 29.7
Time: 19.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 -1.0503488391488898 \cdot 10^{+119}:\\ \;\;\;\;\sqrt{\left(-2 \cdot re\right) \cdot 2.0} \cdot 0.5\\ \mathbf{elif}\;re \le 1.6607509068317904 \cdot 10^{+133}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{\sqrt[3]{im \cdot im + re \cdot re}} \cdot \left|\sqrt[3]{im \cdot im + re \cdot re}\right| - re\right)}\\ \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.0503488391488898 \cdot 10^{+119}:\\
\;\;\;\;\sqrt{\left(-2 \cdot re\right) \cdot 2.0} \cdot 0.5\\

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

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

\end{array}
double f(double re, double im) {
        double r566771 = 0.5;
        double r566772 = 2.0;
        double r566773 = re;
        double r566774 = r566773 * r566773;
        double r566775 = im;
        double r566776 = r566775 * r566775;
        double r566777 = r566774 + r566776;
        double r566778 = sqrt(r566777);
        double r566779 = r566778 - r566773;
        double r566780 = r566772 * r566779;
        double r566781 = sqrt(r566780);
        double r566782 = r566771 * r566781;
        return r566782;
}

double f(double re, double im) {
        double r566783 = re;
        double r566784 = -1.0503488391488898e+119;
        bool r566785 = r566783 <= r566784;
        double r566786 = -2.0;
        double r566787 = r566786 * r566783;
        double r566788 = 2.0;
        double r566789 = r566787 * r566788;
        double r566790 = sqrt(r566789);
        double r566791 = 0.5;
        double r566792 = r566790 * r566791;
        double r566793 = 1.6607509068317904e+133;
        bool r566794 = r566783 <= r566793;
        double r566795 = im;
        double r566796 = r566795 * r566795;
        double r566797 = r566783 * r566783;
        double r566798 = r566796 + r566797;
        double r566799 = cbrt(r566798);
        double r566800 = sqrt(r566799);
        double r566801 = fabs(r566799);
        double r566802 = r566800 * r566801;
        double r566803 = r566802 - r566783;
        double r566804 = r566788 * r566803;
        double r566805 = sqrt(r566804);
        double r566806 = r566791 * r566805;
        double r566807 = 0.0;
        double r566808 = r566794 ? r566806 : r566807;
        double r566809 = r566785 ? r566792 : r566808;
        return r566809;
}

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 3 regimes
  2. if re < -1.0503488391488898e+119

    1. Initial program 52.5

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

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

    if -1.0503488391488898e+119 < re < 1.6607509068317904e+133

    1. Initial program 29.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-cbrt30.2

      \[\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-prod30.1

      \[\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. Simplified30.1

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

    if 1.6607509068317904e+133 < re

    1. Initial program 61.2

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -1.0503488391488898 \cdot 10^{+119}:\\ \;\;\;\;\sqrt{\left(-2 \cdot re\right) \cdot 2.0} \cdot 0.5\\ \mathbf{elif}\;re \le 1.6607509068317904 \cdot 10^{+133}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{\sqrt[3]{im \cdot im + re \cdot re}} \cdot \left|\sqrt[3]{im \cdot im + re \cdot re}\right| - re\right)}\\ \mathbf{else}:\\ \;\;\;\;0\\ \end{array}\]

Reproduce

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