Average Error: 36.8 → 30.0
Time: 19.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 -9.735645360863155 \cdot 10^{-247}:\\ \;\;\;\;0.5 \cdot \sqrt{\frac{im \cdot im}{re + \sqrt{im \cdot im + re \cdot re}} \cdot 2.0}\\ \mathbf{elif}\;im \le 1.1260714228031905 \cdot 10^{-171}:\\ \;\;\;\;\sqrt{2.0 \cdot \left(re \cdot -2\right)} \cdot 0.5\\ \mathbf{elif}\;im \le 1.7084160018085855 \cdot 10^{+61}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(\left(\sqrt{\sqrt{\sqrt[3]{im \cdot im + re \cdot re} \cdot \sqrt[3]{im \cdot im + re \cdot re}} \cdot \sqrt{\sqrt[3]{im \cdot im + re \cdot re}}} \cdot \sqrt{\sqrt{\sqrt[3]{im \cdot im + re \cdot re} \cdot \sqrt[3]{im \cdot im + re \cdot re}}}\right) \cdot \sqrt{\sqrt{\sqrt[3]{im \cdot im + re \cdot re}}} - re\right) \cdot 2.0}\\ \mathbf{else}:\\ \;\;\;\;\sqrt{2.0 \cdot \left(im - re\right)} \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 -9.735645360863155 \cdot 10^{-247}:\\
\;\;\;\;0.5 \cdot \sqrt{\frac{im \cdot im}{re + \sqrt{im \cdot im + re \cdot re}} \cdot 2.0}\\

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

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

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

\end{array}
double f(double re, double im) {
        double r872299 = 0.5;
        double r872300 = 2.0;
        double r872301 = re;
        double r872302 = r872301 * r872301;
        double r872303 = im;
        double r872304 = r872303 * r872303;
        double r872305 = r872302 + r872304;
        double r872306 = sqrt(r872305);
        double r872307 = r872306 - r872301;
        double r872308 = r872300 * r872307;
        double r872309 = sqrt(r872308);
        double r872310 = r872299 * r872309;
        return r872310;
}

double f(double re, double im) {
        double r872311 = im;
        double r872312 = -9.735645360863155e-247;
        bool r872313 = r872311 <= r872312;
        double r872314 = 0.5;
        double r872315 = r872311 * r872311;
        double r872316 = re;
        double r872317 = r872316 * r872316;
        double r872318 = r872315 + r872317;
        double r872319 = sqrt(r872318);
        double r872320 = r872316 + r872319;
        double r872321 = r872315 / r872320;
        double r872322 = 2.0;
        double r872323 = r872321 * r872322;
        double r872324 = sqrt(r872323);
        double r872325 = r872314 * r872324;
        double r872326 = 1.1260714228031905e-171;
        bool r872327 = r872311 <= r872326;
        double r872328 = -2.0;
        double r872329 = r872316 * r872328;
        double r872330 = r872322 * r872329;
        double r872331 = sqrt(r872330);
        double r872332 = r872331 * r872314;
        double r872333 = 1.7084160018085855e+61;
        bool r872334 = r872311 <= r872333;
        double r872335 = cbrt(r872318);
        double r872336 = r872335 * r872335;
        double r872337 = sqrt(r872336);
        double r872338 = sqrt(r872335);
        double r872339 = r872337 * r872338;
        double r872340 = sqrt(r872339);
        double r872341 = sqrt(r872337);
        double r872342 = r872340 * r872341;
        double r872343 = sqrt(r872338);
        double r872344 = r872342 * r872343;
        double r872345 = r872344 - r872316;
        double r872346 = r872345 * r872322;
        double r872347 = sqrt(r872346);
        double r872348 = r872314 * r872347;
        double r872349 = r872311 - r872316;
        double r872350 = r872322 * r872349;
        double r872351 = sqrt(r872350);
        double r872352 = r872351 * r872314;
        double r872353 = r872334 ? r872348 : r872352;
        double r872354 = r872327 ? r872332 : r872353;
        double r872355 = r872313 ? r872325 : r872354;
        return r872355;
}

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 im < -9.735645360863155e-247

    1. Initial program 36.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-sqrt36.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-prod36.8

      \[\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)}\]
    5. Using strategy rm
    6. Applied flip--43.1

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

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

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

    if -9.735645360863155e-247 < im < 1.1260714228031905e-171

    1. Initial program 41.8

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

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

    if 1.1260714228031905e-171 < im < 1.7084160018085855e+61

    1. Initial program 24.9

      \[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-sqrt24.9

      \[\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-prod25.0

      \[\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)}\]
    5. Using strategy rm
    6. Applied add-cube-cbrt25.1

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

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

      \[\leadsto 0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{\sqrt{re \cdot re + im \cdot im}} \cdot \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)} - re\right)}\]
    9. Applied associate-*r*25.1

      \[\leadsto 0.5 \cdot \sqrt{2.0 \cdot \left(\color{blue}{\left(\sqrt{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt{\sqrt{\sqrt[3]{re \cdot re + im \cdot im} \cdot \sqrt[3]{re \cdot re + im \cdot im}}}\right) \cdot \sqrt{\sqrt{\sqrt[3]{re \cdot re + im \cdot im}}}} - re\right)}\]
    10. Using strategy rm
    11. Applied add-cube-cbrt25.2

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

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

    if 1.7084160018085855e+61 < im

    1. Initial program 44.3

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;im \le -9.735645360863155 \cdot 10^{-247}:\\ \;\;\;\;0.5 \cdot \sqrt{\frac{im \cdot im}{re + \sqrt{im \cdot im + re \cdot re}} \cdot 2.0}\\ \mathbf{elif}\;im \le 1.1260714228031905 \cdot 10^{-171}:\\ \;\;\;\;\sqrt{2.0 \cdot \left(re \cdot -2\right)} \cdot 0.5\\ \mathbf{elif}\;im \le 1.7084160018085855 \cdot 10^{+61}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(\left(\sqrt{\sqrt{\sqrt[3]{im \cdot im + re \cdot re} \cdot \sqrt[3]{im \cdot im + re \cdot re}} \cdot \sqrt{\sqrt[3]{im \cdot im + re \cdot re}}} \cdot \sqrt{\sqrt{\sqrt[3]{im \cdot im + re \cdot re} \cdot \sqrt[3]{im \cdot im + re \cdot re}}}\right) \cdot \sqrt{\sqrt{\sqrt[3]{im \cdot im + re \cdot re}}} - re\right) \cdot 2.0}\\ \mathbf{else}:\\ \;\;\;\;\sqrt{2.0 \cdot \left(im - re\right)} \cdot 0.5\\ \end{array}\]

Reproduce

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