Average Error: 37.6 → 29.6
Time: 15.0s
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 -8.246467589308017 \cdot 10^{-100}:\\ \;\;\;\;0.5 \cdot \sqrt{\frac{im \cdot im}{re + \sqrt{im \cdot im + re \cdot re}} \cdot 2.0}\\ \mathbf{elif}\;im \le 3.296358508150943 \cdot 10^{-157}:\\ \;\;\;\;\sqrt{2.0 \cdot \left(re \cdot -2\right)} \cdot 0.5\\ \mathbf{elif}\;im \le 2.3144170619582434 \cdot 10^{+116}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(\left(\sqrt[3]{\sqrt{\sqrt{im \cdot im + re \cdot re}} \cdot \sqrt{\sqrt{im \cdot im + re \cdot re}} - re} \cdot \sqrt[3]{\sqrt{\sqrt{im \cdot im + re \cdot re}} \cdot \sqrt{\sqrt{im \cdot im + re \cdot re}} - re}\right) \cdot \sqrt[3]{\sqrt{\sqrt{im \cdot im + re \cdot re}} \cdot \sqrt{\sqrt{im \cdot im + re \cdot re}} - re}\right)}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(im - re\right) \cdot 2.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}\;im \le -8.246467589308017 \cdot 10^{-100}:\\
\;\;\;\;0.5 \cdot \sqrt{\frac{im \cdot im}{re + \sqrt{im \cdot im + re \cdot re}} \cdot 2.0}\\

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

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

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

\end{array}
double f(double re, double im) {
        double r495278 = 0.5;
        double r495279 = 2.0;
        double r495280 = re;
        double r495281 = r495280 * r495280;
        double r495282 = im;
        double r495283 = r495282 * r495282;
        double r495284 = r495281 + r495283;
        double r495285 = sqrt(r495284);
        double r495286 = r495285 - r495280;
        double r495287 = r495279 * r495286;
        double r495288 = sqrt(r495287);
        double r495289 = r495278 * r495288;
        return r495289;
}

double f(double re, double im) {
        double r495290 = im;
        double r495291 = -8.246467589308017e-100;
        bool r495292 = r495290 <= r495291;
        double r495293 = 0.5;
        double r495294 = r495290 * r495290;
        double r495295 = re;
        double r495296 = r495295 * r495295;
        double r495297 = r495294 + r495296;
        double r495298 = sqrt(r495297);
        double r495299 = r495295 + r495298;
        double r495300 = r495294 / r495299;
        double r495301 = 2.0;
        double r495302 = r495300 * r495301;
        double r495303 = sqrt(r495302);
        double r495304 = r495293 * r495303;
        double r495305 = 3.296358508150943e-157;
        bool r495306 = r495290 <= r495305;
        double r495307 = -2.0;
        double r495308 = r495295 * r495307;
        double r495309 = r495301 * r495308;
        double r495310 = sqrt(r495309);
        double r495311 = r495310 * r495293;
        double r495312 = 2.3144170619582434e+116;
        bool r495313 = r495290 <= r495312;
        double r495314 = sqrt(r495298);
        double r495315 = r495314 * r495314;
        double r495316 = r495315 - r495295;
        double r495317 = cbrt(r495316);
        double r495318 = r495317 * r495317;
        double r495319 = r495318 * r495317;
        double r495320 = r495301 * r495319;
        double r495321 = sqrt(r495320);
        double r495322 = r495293 * r495321;
        double r495323 = r495290 - r495295;
        double r495324 = r495323 * r495301;
        double r495325 = sqrt(r495324);
        double r495326 = r495293 * r495325;
        double r495327 = r495313 ? r495322 : r495326;
        double r495328 = r495306 ? r495311 : r495327;
        double r495329 = r495292 ? r495304 : r495328;
        return r495329;
}

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 < -8.246467589308017e-100

    1. Initial program 36.4

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

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

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

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

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

    if -8.246467589308017e-100 < im < 3.296358508150943e-157

    1. Initial program 41.0

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

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

    if 3.296358508150943e-157 < im < 2.3144170619582434e+116

    1. Initial program 24.1

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

      \[\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-prod24.2

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

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

    if 2.3144170619582434e+116 < im

    1. Initial program 53.0

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;im \le -8.246467589308017 \cdot 10^{-100}:\\ \;\;\;\;0.5 \cdot \sqrt{\frac{im \cdot im}{re + \sqrt{im \cdot im + re \cdot re}} \cdot 2.0}\\ \mathbf{elif}\;im \le 3.296358508150943 \cdot 10^{-157}:\\ \;\;\;\;\sqrt{2.0 \cdot \left(re \cdot -2\right)} \cdot 0.5\\ \mathbf{elif}\;im \le 2.3144170619582434 \cdot 10^{+116}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(\left(\sqrt[3]{\sqrt{\sqrt{im \cdot im + re \cdot re}} \cdot \sqrt{\sqrt{im \cdot im + re \cdot re}} - re} \cdot \sqrt[3]{\sqrt{\sqrt{im \cdot im + re \cdot re}} \cdot \sqrt{\sqrt{im \cdot im + re \cdot re}} - re}\right) \cdot \sqrt[3]{\sqrt{\sqrt{im \cdot im + re \cdot re}} \cdot \sqrt{\sqrt{im \cdot im + re \cdot re}} - re}\right)}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(im - re\right) \cdot 2.0}\\ \end{array}\]

Reproduce

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