Average Error: 38.2 → 23.0
Time: 15.3s
Precision: 64
\[0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\]
\[\begin{array}{l} \mathbf{if}\;im \le -1.448083610175978910753562361100912328711 \cdot 10^{85}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-\left(re + im\right)\right)}\\ \mathbf{elif}\;im \le -8.717270712480298386581507799296087797377 \cdot 10^{-181}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{im \cdot im}{\sqrt{im \cdot im + re \cdot re} + re}}\\ \mathbf{elif}\;im \le 3.192403605923680524362263980990029957748 \cdot 10^{-158}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\ \mathbf{elif}\;im \le 6.883885923015974855193747513967683014063 \cdot 10^{108}:\\ \;\;\;\;0.5 \cdot \frac{\sqrt{2 \cdot \left(im \cdot im\right)}}{\sqrt{\sqrt{im \cdot im + re \cdot re} + re}}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\ \end{array}\]
0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}
\begin{array}{l}
\mathbf{if}\;im \le -1.448083610175978910753562361100912328711 \cdot 10^{85}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-\left(re + im\right)\right)}\\

\mathbf{elif}\;im \le -8.717270712480298386581507799296087797377 \cdot 10^{-181}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{im \cdot im}{\sqrt{im \cdot im + re \cdot re} + re}}\\

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

\mathbf{elif}\;im \le 6.883885923015974855193747513967683014063 \cdot 10^{108}:\\
\;\;\;\;0.5 \cdot \frac{\sqrt{2 \cdot \left(im \cdot im\right)}}{\sqrt{\sqrt{im \cdot im + re \cdot re} + re}}\\

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

\end{array}
double f(double re, double im) {
        double r1069600 = 0.5;
        double r1069601 = 2.0;
        double r1069602 = re;
        double r1069603 = r1069602 * r1069602;
        double r1069604 = im;
        double r1069605 = r1069604 * r1069604;
        double r1069606 = r1069603 + r1069605;
        double r1069607 = sqrt(r1069606);
        double r1069608 = r1069607 - r1069602;
        double r1069609 = r1069601 * r1069608;
        double r1069610 = sqrt(r1069609);
        double r1069611 = r1069600 * r1069610;
        return r1069611;
}

double f(double re, double im) {
        double r1069612 = im;
        double r1069613 = -1.4480836101759789e+85;
        bool r1069614 = r1069612 <= r1069613;
        double r1069615 = 0.5;
        double r1069616 = 2.0;
        double r1069617 = re;
        double r1069618 = r1069617 + r1069612;
        double r1069619 = -r1069618;
        double r1069620 = r1069616 * r1069619;
        double r1069621 = sqrt(r1069620);
        double r1069622 = r1069615 * r1069621;
        double r1069623 = -8.717270712480298e-181;
        bool r1069624 = r1069612 <= r1069623;
        double r1069625 = r1069612 * r1069612;
        double r1069626 = r1069617 * r1069617;
        double r1069627 = r1069625 + r1069626;
        double r1069628 = sqrt(r1069627);
        double r1069629 = r1069628 + r1069617;
        double r1069630 = r1069625 / r1069629;
        double r1069631 = r1069616 * r1069630;
        double r1069632 = sqrt(r1069631);
        double r1069633 = r1069615 * r1069632;
        double r1069634 = 3.1924036059236805e-158;
        bool r1069635 = r1069612 <= r1069634;
        double r1069636 = -2.0;
        double r1069637 = r1069636 * r1069617;
        double r1069638 = r1069616 * r1069637;
        double r1069639 = sqrt(r1069638);
        double r1069640 = r1069615 * r1069639;
        double r1069641 = 6.883885923015975e+108;
        bool r1069642 = r1069612 <= r1069641;
        double r1069643 = r1069616 * r1069625;
        double r1069644 = sqrt(r1069643);
        double r1069645 = sqrt(r1069629);
        double r1069646 = r1069644 / r1069645;
        double r1069647 = r1069615 * r1069646;
        double r1069648 = r1069612 - r1069617;
        double r1069649 = r1069616 * r1069648;
        double r1069650 = sqrt(r1069649);
        double r1069651 = r1069615 * r1069650;
        double r1069652 = r1069642 ? r1069647 : r1069651;
        double r1069653 = r1069635 ? r1069640 : r1069652;
        double r1069654 = r1069624 ? r1069633 : r1069653;
        double r1069655 = r1069614 ? r1069622 : r1069654;
        return r1069655;
}

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 < -1.4480836101759789e+85

    1. Initial program 49.3

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

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\sqrt{\color{blue}{im \cdot im + re \cdot re}} - re\right)}\]
    4. Taylor expanded around -inf 11.5

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

    if -1.4480836101759789e+85 < im < -8.717270712480298e-181

    1. Initial program 26.7

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

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

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \color{blue}{\frac{\sqrt{im \cdot im + re \cdot re} \cdot \sqrt{im \cdot im + re \cdot re} - re \cdot re}{\sqrt{im \cdot im + re \cdot re} + re}}}\]
    6. Simplified28.4

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

    if -8.717270712480298e-181 < im < 3.1924036059236805e-158

    1. Initial program 43.2

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

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

    if 3.1924036059236805e-158 < im < 6.883885923015975e+108

    1. Initial program 25.1

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

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

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \color{blue}{\frac{\sqrt{im \cdot im + re \cdot re} \cdot \sqrt{im \cdot im + re \cdot re} - re \cdot re}{\sqrt{im \cdot im + re \cdot re} + re}}}\]
    6. Applied associate-*r/33.9

      \[\leadsto 0.5 \cdot \sqrt{\color{blue}{\frac{2 \cdot \left(\sqrt{im \cdot im + re \cdot re} \cdot \sqrt{im \cdot im + re \cdot re} - re \cdot re\right)}{\sqrt{im \cdot im + re \cdot re} + re}}}\]
    7. Applied sqrt-div34.0

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

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

    if 6.883885923015975e+108 < im

    1. Initial program 51.7

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;im \le -1.448083610175978910753562361100912328711 \cdot 10^{85}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-\left(re + im\right)\right)}\\ \mathbf{elif}\;im \le -8.717270712480298386581507799296087797377 \cdot 10^{-181}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{im \cdot im}{\sqrt{im \cdot im + re \cdot re} + re}}\\ \mathbf{elif}\;im \le 3.192403605923680524362263980990029957748 \cdot 10^{-158}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\ \mathbf{elif}\;im \le 6.883885923015974855193747513967683014063 \cdot 10^{108}:\\ \;\;\;\;0.5 \cdot \frac{\sqrt{2 \cdot \left(im \cdot im\right)}}{\sqrt{\sqrt{im \cdot im + re \cdot re} + re}}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\ \end{array}\]

Reproduce

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