Average Error: 38.6 → 26.7
Time: 13.3s
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 -2.176665368798762034403420210926666921837 \cdot 10^{117}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\ \mathbf{elif}\;re \le -1.343521980873211229938587841760058319222 \cdot 10^{-299}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{\sqrt{\sqrt[3]{re \cdot re + im \cdot im} \cdot \sqrt[3]{re \cdot re + im \cdot im}}} \cdot \left(\sqrt{\sqrt{\sqrt[3]{re \cdot re + im \cdot im}}} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im}}\right) - re\right)}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{im \cdot im}{\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 -2.176665368798762034403420210926666921837 \cdot 10^{117}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\

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

\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{im \cdot im}{\sqrt{re \cdot re + im \cdot im} + re}}\\

\end{array}
double f(double re, double im) {
        double r21263 = 0.5;
        double r21264 = 2.0;
        double r21265 = re;
        double r21266 = r21265 * r21265;
        double r21267 = im;
        double r21268 = r21267 * r21267;
        double r21269 = r21266 + r21268;
        double r21270 = sqrt(r21269);
        double r21271 = r21270 - r21265;
        double r21272 = r21264 * r21271;
        double r21273 = sqrt(r21272);
        double r21274 = r21263 * r21273;
        return r21274;
}

double f(double re, double im) {
        double r21275 = re;
        double r21276 = -2.176665368798762e+117;
        bool r21277 = r21275 <= r21276;
        double r21278 = 0.5;
        double r21279 = 2.0;
        double r21280 = -2.0;
        double r21281 = r21280 * r21275;
        double r21282 = r21279 * r21281;
        double r21283 = sqrt(r21282);
        double r21284 = r21278 * r21283;
        double r21285 = -1.3435219808732112e-299;
        bool r21286 = r21275 <= r21285;
        double r21287 = r21275 * r21275;
        double r21288 = im;
        double r21289 = r21288 * r21288;
        double r21290 = r21287 + r21289;
        double r21291 = cbrt(r21290);
        double r21292 = r21291 * r21291;
        double r21293 = sqrt(r21292);
        double r21294 = sqrt(r21293);
        double r21295 = sqrt(r21291);
        double r21296 = sqrt(r21295);
        double r21297 = sqrt(r21290);
        double r21298 = sqrt(r21297);
        double r21299 = r21296 * r21298;
        double r21300 = r21294 * r21299;
        double r21301 = r21300 - r21275;
        double r21302 = r21279 * r21301;
        double r21303 = sqrt(r21302);
        double r21304 = r21278 * r21303;
        double r21305 = r21297 + r21275;
        double r21306 = r21289 / r21305;
        double r21307 = r21279 * r21306;
        double r21308 = sqrt(r21307);
        double r21309 = r21278 * r21308;
        double r21310 = r21286 ? r21304 : r21309;
        double r21311 = r21277 ? r21284 : r21310;
        return r21311;
}

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 < -2.176665368798762e+117

    1. Initial program 54.5

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

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

    if -2.176665368798762e+117 < re < -1.3435219808732112e-299

    1. Initial program 21.0

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

      \[\leadsto 0.5 \cdot \sqrt{2 \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-prod21.1

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\color{blue}{\sqrt{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im}}} - re\right)}\]
    5. Using strategy rm
    6. Applied add-cube-cbrt21.1

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\sqrt{\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}}}} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im}} - re\right)}\]
    7. Applied sqrt-prod21.1

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\sqrt{\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}}}} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im}} - re\right)}\]
    8. Applied sqrt-prod21.1

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\color{blue}{\left(\sqrt{\sqrt{\sqrt[3]{re \cdot re + im \cdot im} \cdot \sqrt[3]{re \cdot re + im \cdot im}}} \cdot \sqrt{\sqrt{\sqrt[3]{re \cdot re + im \cdot im}}}\right)} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im}} - re\right)}\]
    9. Applied associate-*l*21.1

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

    if -1.3435219808732112e-299 < re

    1. Initial program 45.3

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

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

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \frac{\color{blue}{im \cdot im}}{\sqrt{re \cdot re + im \cdot im} + re}}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification26.7

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -2.176665368798762034403420210926666921837 \cdot 10^{117}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\ \mathbf{elif}\;re \le -1.343521980873211229938587841760058319222 \cdot 10^{-299}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{\sqrt{\sqrt[3]{re \cdot re + im \cdot im} \cdot \sqrt[3]{re \cdot re + im \cdot im}}} \cdot \left(\sqrt{\sqrt{\sqrt[3]{re \cdot re + im \cdot im}}} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im}}\right) - re\right)}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{im \cdot im}{\sqrt{re \cdot re + im \cdot im} + re}}\\ \end{array}\]

Reproduce

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