Average Error: 37.7 → 24.1
Time: 16.0s
Precision: 64
\[0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}\]
\[\begin{array}{l} \mathbf{if}\;im \le -2.400647882280174 \cdot 10^{+136}:\\ \;\;\;\;\sqrt{\left(re - im\right) \cdot 2.0} \cdot 0.5\\ \mathbf{elif}\;im \le -6.74361552556549 \cdot 10^{-164}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(re + \sqrt{\left(\sqrt{\sqrt[3]{re \cdot re + im \cdot im}} \cdot \sqrt{\sqrt[3]{re \cdot re + im \cdot im}}\right) \cdot \left(\sqrt[3]{re \cdot re + im \cdot im} \cdot \left(\sqrt[3]{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt[3]{\sqrt{re \cdot re + im \cdot im}}\right)\right)}\right)}\\ \mathbf{elif}\;im \le 3.4260603049138435 \cdot 10^{-204}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(re + re\right) \cdot 2.0}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(re + im\right)}\\ \end{array}\]
0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}
\begin{array}{l}
\mathbf{if}\;im \le -2.400647882280174 \cdot 10^{+136}:\\
\;\;\;\;\sqrt{\left(re - im\right) \cdot 2.0} \cdot 0.5\\

\mathbf{elif}\;im \le -6.74361552556549 \cdot 10^{-164}:\\
\;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(re + \sqrt{\left(\sqrt{\sqrt[3]{re \cdot re + im \cdot im}} \cdot \sqrt{\sqrt[3]{re \cdot re + im \cdot im}}\right) \cdot \left(\sqrt[3]{re \cdot re + im \cdot im} \cdot \left(\sqrt[3]{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt[3]{\sqrt{re \cdot re + im \cdot im}}\right)\right)}\right)}\\

\mathbf{elif}\;im \le 3.4260603049138435 \cdot 10^{-204}:\\
\;\;\;\;0.5 \cdot \sqrt{\left(re + re\right) \cdot 2.0}\\

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

\end{array}
double f(double re, double im) {
        double r9498038 = 0.5;
        double r9498039 = 2.0;
        double r9498040 = re;
        double r9498041 = r9498040 * r9498040;
        double r9498042 = im;
        double r9498043 = r9498042 * r9498042;
        double r9498044 = r9498041 + r9498043;
        double r9498045 = sqrt(r9498044);
        double r9498046 = r9498045 + r9498040;
        double r9498047 = r9498039 * r9498046;
        double r9498048 = sqrt(r9498047);
        double r9498049 = r9498038 * r9498048;
        return r9498049;
}

double f(double re, double im) {
        double r9498050 = im;
        double r9498051 = -2.400647882280174e+136;
        bool r9498052 = r9498050 <= r9498051;
        double r9498053 = re;
        double r9498054 = r9498053 - r9498050;
        double r9498055 = 2.0;
        double r9498056 = r9498054 * r9498055;
        double r9498057 = sqrt(r9498056);
        double r9498058 = 0.5;
        double r9498059 = r9498057 * r9498058;
        double r9498060 = -6.74361552556549e-164;
        bool r9498061 = r9498050 <= r9498060;
        double r9498062 = r9498053 * r9498053;
        double r9498063 = r9498050 * r9498050;
        double r9498064 = r9498062 + r9498063;
        double r9498065 = cbrt(r9498064);
        double r9498066 = sqrt(r9498065);
        double r9498067 = r9498066 * r9498066;
        double r9498068 = sqrt(r9498064);
        double r9498069 = cbrt(r9498068);
        double r9498070 = r9498069 * r9498069;
        double r9498071 = r9498065 * r9498070;
        double r9498072 = r9498067 * r9498071;
        double r9498073 = sqrt(r9498072);
        double r9498074 = r9498053 + r9498073;
        double r9498075 = r9498055 * r9498074;
        double r9498076 = sqrt(r9498075);
        double r9498077 = r9498058 * r9498076;
        double r9498078 = 3.4260603049138435e-204;
        bool r9498079 = r9498050 <= r9498078;
        double r9498080 = r9498053 + r9498053;
        double r9498081 = r9498080 * r9498055;
        double r9498082 = sqrt(r9498081);
        double r9498083 = r9498058 * r9498082;
        double r9498084 = r9498053 + r9498050;
        double r9498085 = r9498055 * r9498084;
        double r9498086 = sqrt(r9498085);
        double r9498087 = r9498058 * r9498086;
        double r9498088 = r9498079 ? r9498083 : r9498087;
        double r9498089 = r9498061 ? r9498077 : r9498088;
        double r9498090 = r9498052 ? r9498059 : r9498089;
        return r9498090;
}

Error

Bits error versus re

Bits error versus im

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original37.7
Target32.8
Herbie24.1
\[\begin{array}{l} \mathbf{if}\;re \lt 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.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}\\ \end{array}\]

Derivation

  1. Split input into 4 regimes
  2. if im < -2.400647882280174e+136

    1. Initial program 56.3

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

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

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

    if -2.400647882280174e+136 < im < -6.74361552556549e-164

    1. Initial program 24.2

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

      \[\leadsto 0.5 \cdot \sqrt{2.0 \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)}\]
    4. Using strategy rm
    5. Applied add-sqr-sqrt24.5

      \[\leadsto 0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{\left(\sqrt[3]{re \cdot re + im \cdot im} \cdot \sqrt[3]{re \cdot re + im \cdot im}\right) \cdot \color{blue}{\left(\sqrt{\sqrt[3]{re \cdot re + im \cdot im}} \cdot \sqrt{\sqrt[3]{re \cdot re + im \cdot im}}\right)}} + re\right)}\]
    6. Using strategy rm
    7. Applied add-sqr-sqrt24.5

      \[\leadsto 0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{\left(\sqrt[3]{\color{blue}{\sqrt{re \cdot re + im \cdot im} \cdot \sqrt{re \cdot re + im \cdot im}}} \cdot \sqrt[3]{re \cdot re + im \cdot im}\right) \cdot \left(\sqrt{\sqrt[3]{re \cdot re + im \cdot im}} \cdot \sqrt{\sqrt[3]{re \cdot re + im \cdot im}}\right)} + re\right)}\]
    8. Applied cbrt-prod24.5

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

    if -6.74361552556549e-164 < im < 3.4260603049138435e-204

    1. Initial program 43.9

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

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

    if 3.4260603049138435e-204 < im

    1. Initial program 36.7

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

      \[\leadsto 0.5 \cdot \sqrt{2.0 \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)}\]
    4. Taylor expanded around 0 23.5

      \[\leadsto 0.5 \cdot \sqrt{2.0 \cdot \left(\color{blue}{im} + re\right)}\]
  3. Recombined 4 regimes into one program.
  4. Final simplification24.1

    \[\leadsto \begin{array}{l} \mathbf{if}\;im \le -2.400647882280174 \cdot 10^{+136}:\\ \;\;\;\;\sqrt{\left(re - im\right) \cdot 2.0} \cdot 0.5\\ \mathbf{elif}\;im \le -6.74361552556549 \cdot 10^{-164}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(re + \sqrt{\left(\sqrt{\sqrt[3]{re \cdot re + im \cdot im}} \cdot \sqrt{\sqrt[3]{re \cdot re + im \cdot im}}\right) \cdot \left(\sqrt[3]{re \cdot re + im \cdot im} \cdot \left(\sqrt[3]{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt[3]{\sqrt{re \cdot re + im \cdot im}}\right)\right)}\right)}\\ \mathbf{elif}\;im \le 3.4260603049138435 \cdot 10^{-204}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(re + re\right) \cdot 2.0}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(re + im\right)}\\ \end{array}\]

Reproduce

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

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

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