Average Error: 38.1 → 28.9
Time: 3.9s
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 1.89138032684673357 \cdot 10^{-289}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{im \cdot im}{\sqrt{re \cdot re + im \cdot im} - re}}\\ \mathbf{elif}\;re \le 1.7143375768306352 \cdot 10^{-196}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im + re\right)}\\ \mathbf{elif}\;re \le 6.0409761572375771 \cdot 10^{-106}:\\ \;\;\;\;0.5 \cdot {\left(e^{\sqrt[3]{\log \left(\sqrt{2 \cdot \left(e^{\log \left(\sqrt{re \cdot re + im \cdot im}\right)} + re\right)}\right)} \cdot \sqrt[3]{\log \left(\sqrt{2 \cdot \left(e^{\log \left(\sqrt{re \cdot re + im \cdot im}\right)} + re\right)}\right)}}\right)}^{\left(\sqrt[3]{\log \left(\sqrt{2 \cdot \left(e^{\log \left(\sqrt{re \cdot re + im \cdot im}\right)} + re\right)}\right)}\right)}\\ \mathbf{elif}\;re \le 2.51281944061659445 \cdot 10^{-83}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im + 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 1.89138032684673357 \cdot 10^{-289}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{im \cdot im}{\sqrt{re \cdot re + im \cdot im} - re}}\\

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

\mathbf{elif}\;re \le 6.0409761572375771 \cdot 10^{-106}:\\
\;\;\;\;0.5 \cdot {\left(e^{\sqrt[3]{\log \left(\sqrt{2 \cdot \left(e^{\log \left(\sqrt{re \cdot re + im \cdot im}\right)} + re\right)}\right)} \cdot \sqrt[3]{\log \left(\sqrt{2 \cdot \left(e^{\log \left(\sqrt{re \cdot re + im \cdot im}\right)} + re\right)}\right)}}\right)}^{\left(\sqrt[3]{\log \left(\sqrt{2 \cdot \left(e^{\log \left(\sqrt{re \cdot re + im \cdot im}\right)} + re\right)}\right)}\right)}\\

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

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

\end{array}
double f(double re, double im) {
        double r238702 = 0.5;
        double r238703 = 2.0;
        double r238704 = re;
        double r238705 = r238704 * r238704;
        double r238706 = im;
        double r238707 = r238706 * r238706;
        double r238708 = r238705 + r238707;
        double r238709 = sqrt(r238708);
        double r238710 = r238709 + r238704;
        double r238711 = r238703 * r238710;
        double r238712 = sqrt(r238711);
        double r238713 = r238702 * r238712;
        return r238713;
}

double f(double re, double im) {
        double r238714 = re;
        double r238715 = 1.8913803268467336e-289;
        bool r238716 = r238714 <= r238715;
        double r238717 = 0.5;
        double r238718 = 2.0;
        double r238719 = im;
        double r238720 = r238719 * r238719;
        double r238721 = r238714 * r238714;
        double r238722 = r238721 + r238720;
        double r238723 = sqrt(r238722);
        double r238724 = r238723 - r238714;
        double r238725 = r238720 / r238724;
        double r238726 = r238718 * r238725;
        double r238727 = sqrt(r238726);
        double r238728 = r238717 * r238727;
        double r238729 = 1.7143375768306352e-196;
        bool r238730 = r238714 <= r238729;
        double r238731 = r238719 + r238714;
        double r238732 = r238718 * r238731;
        double r238733 = sqrt(r238732);
        double r238734 = r238717 * r238733;
        double r238735 = 6.040976157237577e-106;
        bool r238736 = r238714 <= r238735;
        double r238737 = log(r238723);
        double r238738 = exp(r238737);
        double r238739 = r238738 + r238714;
        double r238740 = r238718 * r238739;
        double r238741 = sqrt(r238740);
        double r238742 = log(r238741);
        double r238743 = cbrt(r238742);
        double r238744 = r238743 * r238743;
        double r238745 = exp(r238744);
        double r238746 = pow(r238745, r238743);
        double r238747 = r238717 * r238746;
        double r238748 = 2.5128194406165944e-83;
        bool r238749 = r238714 <= r238748;
        double r238750 = 2.0;
        double r238751 = r238750 * r238714;
        double r238752 = r238718 * r238751;
        double r238753 = sqrt(r238752);
        double r238754 = r238717 * r238753;
        double r238755 = r238749 ? r238734 : r238754;
        double r238756 = r238736 ? r238747 : r238755;
        double r238757 = r238730 ? r238734 : r238756;
        double r238758 = r238716 ? r238728 : r238757;
        return r238758;
}

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.1
Target33.2
Herbie28.9
\[\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 4 regimes
  2. if re < 1.8913803268467336e-289

    1. Initial program 45.4

      \[0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}\]
    2. Using strategy rm
    3. Applied flip-+45.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. Simplified35.7

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

    if 1.8913803268467336e-289 < re < 1.7143375768306352e-196 or 6.040976157237577e-106 < re < 2.5128194406165944e-83

    1. Initial program 28.0

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

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

    if 1.7143375768306352e-196 < re < 6.040976157237577e-106

    1. Initial program 17.6

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

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

      \[\leadsto 0.5 \cdot \color{blue}{e^{\log \left(\sqrt{2 \cdot \left(e^{\log \left(\sqrt{re \cdot re + im \cdot im}\right)} + re\right)}\right)}}\]
    6. Using strategy rm
    7. Applied add-cube-cbrt22.2

      \[\leadsto 0.5 \cdot e^{\color{blue}{\left(\sqrt[3]{\log \left(\sqrt{2 \cdot \left(e^{\log \left(\sqrt{re \cdot re + im \cdot im}\right)} + re\right)}\right)} \cdot \sqrt[3]{\log \left(\sqrt{2 \cdot \left(e^{\log \left(\sqrt{re \cdot re + im \cdot im}\right)} + re\right)}\right)}\right) \cdot \sqrt[3]{\log \left(\sqrt{2 \cdot \left(e^{\log \left(\sqrt{re \cdot re + im \cdot im}\right)} + re\right)}\right)}}}\]
    8. Applied exp-prod22.2

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

    if 2.5128194406165944e-83 < re

    1. Initial program 34.2

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le 1.89138032684673357 \cdot 10^{-289}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{im \cdot im}{\sqrt{re \cdot re + im \cdot im} - re}}\\ \mathbf{elif}\;re \le 1.7143375768306352 \cdot 10^{-196}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im + re\right)}\\ \mathbf{elif}\;re \le 6.0409761572375771 \cdot 10^{-106}:\\ \;\;\;\;0.5 \cdot {\left(e^{\sqrt[3]{\log \left(\sqrt{2 \cdot \left(e^{\log \left(\sqrt{re \cdot re + im \cdot im}\right)} + re\right)}\right)} \cdot \sqrt[3]{\log \left(\sqrt{2 \cdot \left(e^{\log \left(\sqrt{re \cdot re + im \cdot im}\right)} + re\right)}\right)}}\right)}^{\left(\sqrt[3]{\log \left(\sqrt{2 \cdot \left(e^{\log \left(\sqrt{re \cdot re + im \cdot im}\right)} + re\right)}\right)}\right)}\\ \mathbf{elif}\;re \le 2.51281944061659445 \cdot 10^{-83}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im + re\right)}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(2 \cdot re\right)}\\ \end{array}\]

Reproduce

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