Average Error: 38.8 → 18.9
Time: 14.0s
Precision: 64
\[0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\]
\[\begin{array}{l} \mathbf{if}\;re \le -6.109096128437792147084578893687228243694 \cdot 10^{127}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left(-re\right) - re\right)}\\ \mathbf{elif}\;re \le 2.349790356887835779639072642677839447725 \cdot 10^{-295}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{\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)}\\ \mathbf{elif}\;re \le 2.024649111095880358596936117866742394071 \cdot 10^{150}:\\ \;\;\;\;0.5 \cdot \frac{\sqrt{2} \cdot \left|im\right|}{\sqrt{\sqrt{re \cdot re + im \cdot im} + re}}\\ \mathbf{else}:\\ \;\;\;\;\frac{\sqrt{2 \cdot \left(im \cdot im\right)}}{\sqrt{re + re}} \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}\;re \le -6.109096128437792147084578893687228243694 \cdot 10^{127}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left(-re\right) - re\right)}\\

\mathbf{elif}\;re \le 2.349790356887835779639072642677839447725 \cdot 10^{-295}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{\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)}\\

\mathbf{elif}\;re \le 2.024649111095880358596936117866742394071 \cdot 10^{150}:\\
\;\;\;\;0.5 \cdot \frac{\sqrt{2} \cdot \left|im\right|}{\sqrt{\sqrt{re \cdot re + im \cdot im} + re}}\\

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

\end{array}
double f(double re, double im) {
        double r27631 = 0.5;
        double r27632 = 2.0;
        double r27633 = re;
        double r27634 = r27633 * r27633;
        double r27635 = im;
        double r27636 = r27635 * r27635;
        double r27637 = r27634 + r27636;
        double r27638 = sqrt(r27637);
        double r27639 = r27638 - r27633;
        double r27640 = r27632 * r27639;
        double r27641 = sqrt(r27640);
        double r27642 = r27631 * r27641;
        return r27642;
}

double f(double re, double im) {
        double r27643 = re;
        double r27644 = -6.109096128437792e+127;
        bool r27645 = r27643 <= r27644;
        double r27646 = 0.5;
        double r27647 = 2.0;
        double r27648 = -r27643;
        double r27649 = r27648 - r27643;
        double r27650 = r27647 * r27649;
        double r27651 = sqrt(r27650);
        double r27652 = r27646 * r27651;
        double r27653 = 2.3497903568878358e-295;
        bool r27654 = r27643 <= r27653;
        double r27655 = r27643 * r27643;
        double r27656 = im;
        double r27657 = r27656 * r27656;
        double r27658 = r27655 + r27657;
        double r27659 = cbrt(r27658);
        double r27660 = r27659 * r27659;
        double r27661 = r27660 * r27659;
        double r27662 = sqrt(r27661);
        double r27663 = r27662 - r27643;
        double r27664 = r27647 * r27663;
        double r27665 = sqrt(r27664);
        double r27666 = r27646 * r27665;
        double r27667 = 2.0246491110958804e+150;
        bool r27668 = r27643 <= r27667;
        double r27669 = sqrt(r27647);
        double r27670 = fabs(r27656);
        double r27671 = r27669 * r27670;
        double r27672 = sqrt(r27658);
        double r27673 = r27672 + r27643;
        double r27674 = sqrt(r27673);
        double r27675 = r27671 / r27674;
        double r27676 = r27646 * r27675;
        double r27677 = r27647 * r27657;
        double r27678 = sqrt(r27677);
        double r27679 = r27643 + r27643;
        double r27680 = sqrt(r27679);
        double r27681 = r27678 / r27680;
        double r27682 = r27681 * r27646;
        double r27683 = r27668 ? r27676 : r27682;
        double r27684 = r27654 ? r27666 : r27683;
        double r27685 = r27645 ? r27652 : r27684;
        return r27685;
}

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 re < -6.109096128437792e+127

    1. Initial program 56.4

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

      \[\leadsto 0.5 \cdot \sqrt{2 \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-prod56.4

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

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

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

    if -6.109096128437792e+127 < re < 2.3497903568878358e-295

    1. Initial program 21.1

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

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\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)}\]

    if 2.3497903568878358e-295 < re < 2.0246491110958804e+150

    1. Initial program 39.7

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

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

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

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

      \[\leadsto 0.5 \cdot \frac{\color{blue}{\sqrt{2 \cdot \left(im \cdot im + 0\right)}}}{\sqrt{\sqrt{re \cdot re + im \cdot im} + re}}\]
    7. Using strategy rm
    8. Applied sqrt-prod29.6

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

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

    if 2.0246491110958804e+150 < re

    1. Initial program 63.9

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

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

      \[\leadsto 0.5 \cdot \sqrt{\color{blue}{\frac{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} \cdot \sqrt{re \cdot re + im \cdot im} - re \cdot re\right)}{\sqrt{re \cdot re + im \cdot im} + re}}}\]
    5. Applied sqrt-div63.9

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

      \[\leadsto 0.5 \cdot \frac{\color{blue}{\sqrt{2 \cdot \left(im \cdot im + 0\right)}}}{\sqrt{\sqrt{re \cdot re + im \cdot im} + re}}\]
    7. Taylor expanded around inf 20.8

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -6.109096128437792147084578893687228243694 \cdot 10^{127}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left(-re\right) - re\right)}\\ \mathbf{elif}\;re \le 2.349790356887835779639072642677839447725 \cdot 10^{-295}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{\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)}\\ \mathbf{elif}\;re \le 2.024649111095880358596936117866742394071 \cdot 10^{150}:\\ \;\;\;\;0.5 \cdot \frac{\sqrt{2} \cdot \left|im\right|}{\sqrt{\sqrt{re \cdot re + im \cdot im} + re}}\\ \mathbf{else}:\\ \;\;\;\;\frac{\sqrt{2 \cdot \left(im \cdot im\right)}}{\sqrt{re + re}} \cdot 0.5\\ \end{array}\]

Reproduce

herbie shell --seed 2019212 
(FPCore (re im)
  :name "math.sqrt on complex, imaginary part, im greater than 0 branch"
  :precision binary64
  (* 0.5 (sqrt (* 2 (- (sqrt (+ (* re re) (* im im))) re)))))