Average Error: 38.2 → 23.0
Time: 16.4s
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{\left(\left(-im\right) - re\right) \cdot 2}\\ \mathbf{elif}\;im \le -8.717270712480298386581507799296087797377 \cdot 10^{-181}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{im \cdot im}{re + \sqrt{im \cdot im + re \cdot re}}}\\ \mathbf{elif}\;im \le 3.192403605923680524362263980990029957748 \cdot 10^{-158}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(re \cdot -2\right) \cdot 2}\\ \mathbf{elif}\;im \le 6.883885923015974855193747513967683014063 \cdot 10^{108}:\\ \;\;\;\;0.5 \cdot \frac{\sqrt{2 \cdot \left(im \cdot im\right)}}{\sqrt{re + \sqrt{im \cdot im + re \cdot re}}}\\ \mathbf{else}:\\ \;\;\;\;\sqrt{\left(im - re\right) \cdot 2} \cdot 0.5\\ \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{\left(\left(-im\right) - re\right) \cdot 2}\\

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

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

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

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

\end{array}
double f(double re, double im) {
        double r700530 = 0.5;
        double r700531 = 2.0;
        double r700532 = re;
        double r700533 = r700532 * r700532;
        double r700534 = im;
        double r700535 = r700534 * r700534;
        double r700536 = r700533 + r700535;
        double r700537 = sqrt(r700536);
        double r700538 = r700537 - r700532;
        double r700539 = r700531 * r700538;
        double r700540 = sqrt(r700539);
        double r700541 = r700530 * r700540;
        return r700541;
}

double f(double re, double im) {
        double r700542 = im;
        double r700543 = -1.4480836101759789e+85;
        bool r700544 = r700542 <= r700543;
        double r700545 = 0.5;
        double r700546 = -r700542;
        double r700547 = re;
        double r700548 = r700546 - r700547;
        double r700549 = 2.0;
        double r700550 = r700548 * r700549;
        double r700551 = sqrt(r700550);
        double r700552 = r700545 * r700551;
        double r700553 = -8.717270712480298e-181;
        bool r700554 = r700542 <= r700553;
        double r700555 = r700542 * r700542;
        double r700556 = r700547 * r700547;
        double r700557 = r700555 + r700556;
        double r700558 = sqrt(r700557);
        double r700559 = r700547 + r700558;
        double r700560 = r700555 / r700559;
        double r700561 = r700549 * r700560;
        double r700562 = sqrt(r700561);
        double r700563 = r700545 * r700562;
        double r700564 = 3.1924036059236805e-158;
        bool r700565 = r700542 <= r700564;
        double r700566 = -2.0;
        double r700567 = r700547 * r700566;
        double r700568 = r700567 * r700549;
        double r700569 = sqrt(r700568);
        double r700570 = r700545 * r700569;
        double r700571 = 6.883885923015975e+108;
        bool r700572 = r700542 <= r700571;
        double r700573 = r700549 * r700555;
        double r700574 = sqrt(r700573);
        double r700575 = sqrt(r700559);
        double r700576 = r700574 / r700575;
        double r700577 = r700545 * r700576;
        double r700578 = r700542 - r700547;
        double r700579 = r700578 * r700549;
        double r700580 = sqrt(r700579);
        double r700581 = r700580 * r700545;
        double r700582 = r700572 ? r700577 : r700581;
        double r700583 = r700565 ? r700570 : r700582;
        double r700584 = r700554 ? r700563 : r700583;
        double r700585 = r700544 ? r700552 : r700584;
        return r700585;
}

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 \left(\color{blue}{-1 \cdot im} - re\right)}\]
    5. Simplified11.5

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\color{blue}{\left(-im\right)} - re\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{\left(\left(-im\right) - re\right) \cdot 2}\\ \mathbf{elif}\;im \le -8.717270712480298386581507799296087797377 \cdot 10^{-181}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{im \cdot im}{re + \sqrt{im \cdot im + re \cdot re}}}\\ \mathbf{elif}\;im \le 3.192403605923680524362263980990029957748 \cdot 10^{-158}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(re \cdot -2\right) \cdot 2}\\ \mathbf{elif}\;im \le 6.883885923015974855193747513967683014063 \cdot 10^{108}:\\ \;\;\;\;0.5 \cdot \frac{\sqrt{2 \cdot \left(im \cdot im\right)}}{\sqrt{re + \sqrt{im \cdot im + re \cdot re}}}\\ \mathbf{else}:\\ \;\;\;\;\sqrt{\left(im - re\right) \cdot 2} \cdot 0.5\\ \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)))))