Average Error: 38.2 → 26.0
Time: 12.5s
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 -2.142078331456716064324417880249684721011 \cdot 10^{-307}:\\ \;\;\;\;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 2.239439368950259898064612718385459890624 \cdot 10^{78}:\\ \;\;\;\;0.5 \cdot \left(\sqrt{2} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im} + re}\right)\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(re + 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 -2.142078331456716064324417880249684721011 \cdot 10^{-307}:\\
\;\;\;\;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 2.239439368950259898064612718385459890624 \cdot 10^{78}:\\
\;\;\;\;0.5 \cdot \left(\sqrt{2} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im} + re}\right)\\

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

\end{array}
double f(double re, double im) {
        double r267921 = 0.5;
        double r267922 = 2.0;
        double r267923 = re;
        double r267924 = r267923 * r267923;
        double r267925 = im;
        double r267926 = r267925 * r267925;
        double r267927 = r267924 + r267926;
        double r267928 = sqrt(r267927);
        double r267929 = r267928 + r267923;
        double r267930 = r267922 * r267929;
        double r267931 = sqrt(r267930);
        double r267932 = r267921 * r267931;
        return r267932;
}

double f(double re, double im) {
        double r267933 = re;
        double r267934 = -2.142078331456716e-307;
        bool r267935 = r267933 <= r267934;
        double r267936 = 0.5;
        double r267937 = im;
        double r267938 = r267937 * r267937;
        double r267939 = 2.0;
        double r267940 = r267938 * r267939;
        double r267941 = sqrt(r267940);
        double r267942 = r267933 * r267933;
        double r267943 = r267942 + r267938;
        double r267944 = sqrt(r267943);
        double r267945 = r267944 - r267933;
        double r267946 = sqrt(r267945);
        double r267947 = r267941 / r267946;
        double r267948 = r267936 * r267947;
        double r267949 = 2.23943936895026e+78;
        bool r267950 = r267933 <= r267949;
        double r267951 = sqrt(r267939);
        double r267952 = r267944 + r267933;
        double r267953 = sqrt(r267952);
        double r267954 = r267951 * r267953;
        double r267955 = r267936 * r267954;
        double r267956 = r267933 + r267933;
        double r267957 = r267939 * r267956;
        double r267958 = sqrt(r267957);
        double r267959 = r267936 * r267958;
        double r267960 = r267950 ? r267955 : r267959;
        double r267961 = r267935 ? r267948 : r267960;
        return r267961;
}

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.2
Target33.3
Herbie26.0
\[\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 < -2.142078331456716e-307

    1. Initial program 44.7

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

      \[\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. Simplified33.9

      \[\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 -2.142078331456716e-307 < re < 2.23943936895026e+78

    1. Initial program 22.4

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

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

    if 2.23943936895026e+78 < re

    1. Initial program 48.4

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -2.142078331456716064324417880249684721011 \cdot 10^{-307}:\\ \;\;\;\;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 2.239439368950259898064612718385459890624 \cdot 10^{78}:\\ \;\;\;\;0.5 \cdot \left(\sqrt{2} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im} + re}\right)\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(re + re\right)}\\ \end{array}\]

Reproduce

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