Average Error: 37.7 → 25.4
Time: 27.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 -1.628723451170046 \cdot 10^{+127}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(-\left(re + im\right)\right) \cdot 2.0}\\ \mathbf{elif}\;im \le 5.6452215836668445 \cdot 10^{-174}:\\ \;\;\;\;\left(\sqrt{\sqrt{2.0 \cdot \left(\sqrt{im \cdot im + re \cdot re} - re\right)}} \cdot \sqrt{\sqrt{2.0 \cdot \left(\sqrt{im \cdot im + re \cdot re} - re\right)}}\right) \cdot 0.5\\ \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 -1.628723451170046 \cdot 10^{+127}:\\
\;\;\;\;0.5 \cdot \sqrt{\left(-\left(re + im\right)\right) \cdot 2.0}\\

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

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

\end{array}
double f(double re, double im) {
        double r864470 = 0.5;
        double r864471 = 2.0;
        double r864472 = re;
        double r864473 = r864472 * r864472;
        double r864474 = im;
        double r864475 = r864474 * r864474;
        double r864476 = r864473 + r864475;
        double r864477 = sqrt(r864476);
        double r864478 = r864477 - r864472;
        double r864479 = r864471 * r864478;
        double r864480 = sqrt(r864479);
        double r864481 = r864470 * r864480;
        return r864481;
}

double f(double re, double im) {
        double r864482 = im;
        double r864483 = -1.628723451170046e+127;
        bool r864484 = r864482 <= r864483;
        double r864485 = 0.5;
        double r864486 = re;
        double r864487 = r864486 + r864482;
        double r864488 = -r864487;
        double r864489 = 2.0;
        double r864490 = r864488 * r864489;
        double r864491 = sqrt(r864490);
        double r864492 = r864485 * r864491;
        double r864493 = 5.6452215836668445e-174;
        bool r864494 = r864482 <= r864493;
        double r864495 = r864482 * r864482;
        double r864496 = r864486 * r864486;
        double r864497 = r864495 + r864496;
        double r864498 = sqrt(r864497);
        double r864499 = r864498 - r864486;
        double r864500 = r864489 * r864499;
        double r864501 = sqrt(r864500);
        double r864502 = sqrt(r864501);
        double r864503 = r864502 * r864502;
        double r864504 = r864503 * r864485;
        double r864505 = r864482 - r864486;
        double r864506 = r864505 * r864489;
        double r864507 = sqrt(r864506);
        double r864508 = r864485 * r864507;
        double r864509 = r864494 ? r864504 : r864508;
        double r864510 = r864484 ? r864492 : r864509;
        return r864510;
}

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 im < -1.628723451170046e+127

    1. Initial program 54.6

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

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

      \[\leadsto 0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{\color{blue}{im \cdot im + re \cdot re}} - re\right)}\]
    4. Using strategy rm
    5. Applied add-exp-log55.2

      \[\leadsto 0.5 \cdot \sqrt{2.0 \cdot \left(\color{blue}{e^{\log \left(\sqrt{im \cdot im + re \cdot re}\right)}} - re\right)}\]
    6. Taylor expanded around -inf 8.9

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

    if -1.628723451170046e+127 < im < 5.6452215836668445e-174

    1. Initial program 33.0

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

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

      \[\leadsto 0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{\color{blue}{im \cdot im + re \cdot re}} - re\right)}\]
    4. Using strategy rm
    5. Applied add-sqr-sqrt33.2

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

    if 5.6452215836668445e-174 < im

    1. Initial program 36.3

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;im \le -1.628723451170046 \cdot 10^{+127}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(-\left(re + im\right)\right) \cdot 2.0}\\ \mathbf{elif}\;im \le 5.6452215836668445 \cdot 10^{-174}:\\ \;\;\;\;\left(\sqrt{\sqrt{2.0 \cdot \left(\sqrt{im \cdot im + re \cdot re} - re\right)}} \cdot \sqrt{\sqrt{2.0 \cdot \left(\sqrt{im \cdot im + re \cdot re} - re\right)}}\right) \cdot 0.5\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(im - re\right) \cdot 2.0}\\ \end{array}\]

Reproduce

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