Average Error: 38.9 → 26.5
Time: 14.8s
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 4.003218908727751769435456693065969257664 \cdot 10^{-310}:\\ \;\;\;\;0.5 \cdot \frac{\sqrt{\left(im \cdot im\right) \cdot 2}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\\ \mathbf{elif}\;re \le 8.148041992667695284543397003902154699559 \cdot 10^{135}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{\sqrt{\sqrt{re \cdot re + im \cdot im}}} \cdot {\left(\sqrt{\sqrt{\sqrt{re \cdot re + im \cdot im}}}\right)}^{3} + re\right)}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(2 \cdot 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}\;re \le 4.003218908727751769435456693065969257664 \cdot 10^{-310}:\\
\;\;\;\;0.5 \cdot \frac{\sqrt{\left(im \cdot im\right) \cdot 2}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\\

\mathbf{elif}\;re \le 8.148041992667695284543397003902154699559 \cdot 10^{135}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{\sqrt{\sqrt{re \cdot re + im \cdot im}}} \cdot {\left(\sqrt{\sqrt{\sqrt{re \cdot re + im \cdot im}}}\right)}^{3} + re\right)}\\

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

\end{array}
double f(double re, double im) {
        double r103754 = 0.5;
        double r103755 = 2.0;
        double r103756 = re;
        double r103757 = r103756 * r103756;
        double r103758 = im;
        double r103759 = r103758 * r103758;
        double r103760 = r103757 + r103759;
        double r103761 = sqrt(r103760);
        double r103762 = r103761 + r103756;
        double r103763 = r103755 * r103762;
        double r103764 = sqrt(r103763);
        double r103765 = r103754 * r103764;
        return r103765;
}

double f(double re, double im) {
        double r103766 = re;
        double r103767 = 4.00321890872775e-310;
        bool r103768 = r103766 <= r103767;
        double r103769 = 0.5;
        double r103770 = im;
        double r103771 = r103770 * r103770;
        double r103772 = 2.0;
        double r103773 = r103771 * r103772;
        double r103774 = sqrt(r103773);
        double r103775 = r103766 * r103766;
        double r103776 = r103775 + r103771;
        double r103777 = sqrt(r103776);
        double r103778 = r103777 - r103766;
        double r103779 = sqrt(r103778);
        double r103780 = r103774 / r103779;
        double r103781 = r103769 * r103780;
        double r103782 = 8.148041992667695e+135;
        bool r103783 = r103766 <= r103782;
        double r103784 = sqrt(r103777);
        double r103785 = sqrt(r103784);
        double r103786 = 3.0;
        double r103787 = pow(r103785, r103786);
        double r103788 = r103785 * r103787;
        double r103789 = r103788 + r103766;
        double r103790 = r103772 * r103789;
        double r103791 = sqrt(r103790);
        double r103792 = r103769 * r103791;
        double r103793 = 2.0;
        double r103794 = r103793 * r103766;
        double r103795 = r103772 * r103794;
        double r103796 = sqrt(r103795);
        double r103797 = r103769 * r103796;
        double r103798 = r103783 ? r103792 : r103797;
        double r103799 = r103768 ? r103781 : r103798;
        return r103799;
}

Error

Bits error versus re

Bits error versus im

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original38.9
Target33.7
Herbie26.5
\[\begin{array}{l} \mathbf{if}\;re \lt 0.0:\\ \;\;\;\;0.5 \cdot \left(\sqrt{2} \cdot \sqrt{\frac{im \cdot im}{\sqrt{re \cdot re + im \cdot im} - re}}\right)\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}\\ \end{array}\]

Derivation

  1. Split input into 3 regimes
  2. if re < 4.00321890872775e-310

    1. Initial program 46.3

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

      \[\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/46.2

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

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

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

    if 4.00321890872775e-310 < re < 8.148041992667695e+135

    1. Initial program 21.0

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

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

      \[\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. Using strategy rm
    6. Applied add-sqr-sqrt21.1

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

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

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\color{blue}{\left(\sqrt{\sqrt{\sqrt{re \cdot re + im \cdot im}}} \cdot \sqrt{\sqrt{\sqrt{re \cdot re + im \cdot im}}}\right)} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im}} + re\right)}\]
    9. Applied associate-*l*21.2

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\color{blue}{\sqrt{\sqrt{\sqrt{re \cdot re + im \cdot im}}} \cdot \left(\sqrt{\sqrt{\sqrt{re \cdot re + im \cdot im}}} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im}}\right)} + re\right)}\]
    10. Simplified21.3

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

    if 8.148041992667695e+135 < re

    1. Initial program 58.0

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

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

      \[\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. Using strategy rm
    6. Applied add-sqr-sqrt58.0

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

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

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\color{blue}{\left(\sqrt{\sqrt{\sqrt{re \cdot re + im \cdot im}}} \cdot \sqrt{\sqrt{\sqrt{re \cdot re + im \cdot im}}}\right)} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im}} + re\right)}\]
    9. Applied associate-*l*58.0

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

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\sqrt{\sqrt{\sqrt{re \cdot re + im \cdot im}}} \cdot \color{blue}{{\left(\sqrt{\sqrt{\sqrt{re \cdot re + im \cdot im}}}\right)}^{3}} + re\right)}\]
    11. Taylor expanded around inf 8.4

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le 4.003218908727751769435456693065969257664 \cdot 10^{-310}:\\ \;\;\;\;0.5 \cdot \frac{\sqrt{\left(im \cdot im\right) \cdot 2}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\\ \mathbf{elif}\;re \le 8.148041992667695284543397003902154699559 \cdot 10^{135}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{\sqrt{\sqrt{re \cdot re + im \cdot im}}} \cdot {\left(\sqrt{\sqrt{\sqrt{re \cdot re + im \cdot im}}}\right)}^{3} + re\right)}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(2 \cdot re\right)}\\ \end{array}\]

Reproduce

herbie shell --seed 2019303 
(FPCore (re im)
  :name "math.sqrt on complex, real part"
  :precision binary64

  :herbie-target
  (if (< re 0.0) (* 0.5 (* (sqrt 2) (sqrt (/ (* im im) (- (sqrt (+ (* re re) (* im im))) re))))) (* 0.5 (sqrt (* 2 (+ (sqrt (+ (* re re) (* im im))) re)))))

  (* 0.5 (sqrt (* 2 (+ (sqrt (+ (* re re) (* im im))) re)))))