Average Error: 37.5 → 22.6
Time: 16.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}\;im \le -3.6111760266152055 \cdot 10^{-08}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(-\left(re + im\right)\right) \cdot 2.0}\\ \mathbf{elif}\;im \le -2.9634639532950256 \cdot 10^{-188}:\\ \;\;\;\;\sqrt{2.0 \cdot \frac{im}{\frac{\sqrt{re \cdot re + im \cdot im} + re}{im}}} \cdot 0.5\\ \mathbf{elif}\;im \le 6.510449215984508 \cdot 10^{-134}:\\ \;\;\;\;\sqrt{2.0 \cdot \left(re \cdot -2\right)} \cdot 0.5\\ \mathbf{elif}\;im \le 1.1476303183370092 \cdot 10^{+117}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im}} - re\right)}\\ \mathbf{else}:\\ \;\;\;\;\sqrt{\left(im - 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}\;im \le -3.6111760266152055 \cdot 10^{-08}:\\
\;\;\;\;0.5 \cdot \sqrt{\left(-\left(re + im\right)\right) \cdot 2.0}\\

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

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

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

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

\end{array}
double f(double re, double im) {
        double r945131 = 0.5;
        double r945132 = 2.0;
        double r945133 = re;
        double r945134 = r945133 * r945133;
        double r945135 = im;
        double r945136 = r945135 * r945135;
        double r945137 = r945134 + r945136;
        double r945138 = sqrt(r945137);
        double r945139 = r945138 - r945133;
        double r945140 = r945132 * r945139;
        double r945141 = sqrt(r945140);
        double r945142 = r945131 * r945141;
        return r945142;
}

double f(double re, double im) {
        double r945143 = im;
        double r945144 = -3.6111760266152055e-08;
        bool r945145 = r945143 <= r945144;
        double r945146 = 0.5;
        double r945147 = re;
        double r945148 = r945147 + r945143;
        double r945149 = -r945148;
        double r945150 = 2.0;
        double r945151 = r945149 * r945150;
        double r945152 = sqrt(r945151);
        double r945153 = r945146 * r945152;
        double r945154 = -2.9634639532950256e-188;
        bool r945155 = r945143 <= r945154;
        double r945156 = r945147 * r945147;
        double r945157 = r945143 * r945143;
        double r945158 = r945156 + r945157;
        double r945159 = sqrt(r945158);
        double r945160 = r945159 + r945147;
        double r945161 = r945160 / r945143;
        double r945162 = r945143 / r945161;
        double r945163 = r945150 * r945162;
        double r945164 = sqrt(r945163);
        double r945165 = r945164 * r945146;
        double r945166 = 6.510449215984508e-134;
        bool r945167 = r945143 <= r945166;
        double r945168 = -2.0;
        double r945169 = r945147 * r945168;
        double r945170 = r945150 * r945169;
        double r945171 = sqrt(r945170);
        double r945172 = r945171 * r945146;
        double r945173 = 1.1476303183370092e+117;
        bool r945174 = r945143 <= r945173;
        double r945175 = sqrt(r945159);
        double r945176 = r945175 * r945175;
        double r945177 = r945176 - r945147;
        double r945178 = r945150 * r945177;
        double r945179 = sqrt(r945178);
        double r945180 = r945146 * r945179;
        double r945181 = r945143 - r945147;
        double r945182 = r945181 * r945150;
        double r945183 = sqrt(r945182);
        double r945184 = r945183 * r945146;
        double r945185 = r945174 ? r945180 : r945184;
        double r945186 = r945167 ? r945172 : r945185;
        double r945187 = r945155 ? r945165 : r945186;
        double r945188 = r945145 ? r945153 : r945187;
        return r945188;
}

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 5 regimes
  2. if im < -3.6111760266152055e-08

    1. Initial program 40.1

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

      \[\leadsto 0.5 \cdot \sqrt{2.0 \cdot \frac{\color{blue}{im \cdot im}}{\sqrt{re \cdot re + im \cdot im} + re}}\]
    5. Taylor expanded around -inf 14.4

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

    if -3.6111760266152055e-08 < im < -2.9634639532950256e-188

    1. Initial program 29.8

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

      \[\leadsto 0.5 \cdot \sqrt{2.0 \cdot \frac{\color{blue}{im \cdot im}}{\sqrt{re \cdot re + im \cdot im} + re}}\]
    5. Using strategy rm
    6. Applied associate-/l*30.8

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

    if -2.9634639532950256e-188 < im < 6.510449215984508e-134

    1. Initial program 42.2

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

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

    if 6.510449215984508e-134 < im < 1.1476303183370092e+117

    1. Initial program 22.8

      \[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-sqrt22.8

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

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

    if 1.1476303183370092e+117 < im

    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 0 9.1

      \[\leadsto 0.5 \cdot \sqrt{2.0 \cdot \left(\color{blue}{im} - re\right)}\]
  3. Recombined 5 regimes into one program.
  4. Final simplification22.6

    \[\leadsto \begin{array}{l} \mathbf{if}\;im \le -3.6111760266152055 \cdot 10^{-08}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(-\left(re + im\right)\right) \cdot 2.0}\\ \mathbf{elif}\;im \le -2.9634639532950256 \cdot 10^{-188}:\\ \;\;\;\;\sqrt{2.0 \cdot \frac{im}{\frac{\sqrt{re \cdot re + im \cdot im} + re}{im}}} \cdot 0.5\\ \mathbf{elif}\;im \le 6.510449215984508 \cdot 10^{-134}:\\ \;\;\;\;\sqrt{2.0 \cdot \left(re \cdot -2\right)} \cdot 0.5\\ \mathbf{elif}\;im \le 1.1476303183370092 \cdot 10^{+117}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im}} - re\right)}\\ \mathbf{else}:\\ \;\;\;\;\sqrt{\left(im - re\right) \cdot 2.0} \cdot 0.5\\ \end{array}\]

Reproduce

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