Average Error: 37.5 → 26.9
Time: 18.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}\;re \le -2.6219396713989246 \cdot 10^{+28}:\\ \;\;\;\;\frac{\sqrt{\left(im \cdot im\right) \cdot 2.0}}{\sqrt{\sqrt{im \cdot im + re \cdot re} - re}} \cdot 0.5\\ \mathbf{elif}\;re \le -3.0560575984185278 \cdot 10^{-28}:\\ \;\;\;\;\sqrt{2.0 \cdot \left(im + re\right)} \cdot 0.5\\ \mathbf{elif}\;re \le -2.4751289839842727 \cdot 10^{-197}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \frac{im \cdot im}{\sqrt{im \cdot im + re \cdot re} - re}}\\ \mathbf{elif}\;re \le -1.0467551994962917 \cdot 10^{-267}:\\ \;\;\;\;\sqrt{2.0 \cdot \left(im + re\right)} \cdot 0.5\\ \mathbf{elif}\;re \le 9.007455771870733 \cdot 10^{+76}:\\ \;\;\;\;0.5 \cdot \left(\sqrt{\sqrt{\left(re + \sqrt{im \cdot im + re \cdot re}\right) \cdot 2.0}} \cdot \sqrt{\sqrt{\left(re + \sqrt{im \cdot im + re \cdot re}\right) \cdot 2.0}}\right)\\ \mathbf{else}:\\ \;\;\;\;\sqrt{\left(re + re\right) \cdot 2.0} \cdot 0.5\\ \end{array}\]
0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}
\begin{array}{l}
\mathbf{if}\;re \le -2.6219396713989246 \cdot 10^{+28}:\\
\;\;\;\;\frac{\sqrt{\left(im \cdot im\right) \cdot 2.0}}{\sqrt{\sqrt{im \cdot im + re \cdot re} - re}} \cdot 0.5\\

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

\mathbf{elif}\;re \le -2.4751289839842727 \cdot 10^{-197}:\\
\;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \frac{im \cdot im}{\sqrt{im \cdot im + re \cdot re} - re}}\\

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

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

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

\end{array}
double f(double re, double im) {
        double r8470318 = 0.5;
        double r8470319 = 2.0;
        double r8470320 = re;
        double r8470321 = r8470320 * r8470320;
        double r8470322 = im;
        double r8470323 = r8470322 * r8470322;
        double r8470324 = r8470321 + r8470323;
        double r8470325 = sqrt(r8470324);
        double r8470326 = r8470325 + r8470320;
        double r8470327 = r8470319 * r8470326;
        double r8470328 = sqrt(r8470327);
        double r8470329 = r8470318 * r8470328;
        return r8470329;
}

double f(double re, double im) {
        double r8470330 = re;
        double r8470331 = -2.6219396713989246e+28;
        bool r8470332 = r8470330 <= r8470331;
        double r8470333 = im;
        double r8470334 = r8470333 * r8470333;
        double r8470335 = 2.0;
        double r8470336 = r8470334 * r8470335;
        double r8470337 = sqrt(r8470336);
        double r8470338 = r8470330 * r8470330;
        double r8470339 = r8470334 + r8470338;
        double r8470340 = sqrt(r8470339);
        double r8470341 = r8470340 - r8470330;
        double r8470342 = sqrt(r8470341);
        double r8470343 = r8470337 / r8470342;
        double r8470344 = 0.5;
        double r8470345 = r8470343 * r8470344;
        double r8470346 = -3.0560575984185278e-28;
        bool r8470347 = r8470330 <= r8470346;
        double r8470348 = r8470333 + r8470330;
        double r8470349 = r8470335 * r8470348;
        double r8470350 = sqrt(r8470349);
        double r8470351 = r8470350 * r8470344;
        double r8470352 = -2.4751289839842727e-197;
        bool r8470353 = r8470330 <= r8470352;
        double r8470354 = r8470334 / r8470341;
        double r8470355 = r8470335 * r8470354;
        double r8470356 = sqrt(r8470355);
        double r8470357 = r8470344 * r8470356;
        double r8470358 = -1.0467551994962917e-267;
        bool r8470359 = r8470330 <= r8470358;
        double r8470360 = 9.007455771870733e+76;
        bool r8470361 = r8470330 <= r8470360;
        double r8470362 = r8470330 + r8470340;
        double r8470363 = r8470362 * r8470335;
        double r8470364 = sqrt(r8470363);
        double r8470365 = sqrt(r8470364);
        double r8470366 = r8470365 * r8470365;
        double r8470367 = r8470344 * r8470366;
        double r8470368 = r8470330 + r8470330;
        double r8470369 = r8470368 * r8470335;
        double r8470370 = sqrt(r8470369);
        double r8470371 = r8470370 * r8470344;
        double r8470372 = r8470361 ? r8470367 : r8470371;
        double r8470373 = r8470359 ? r8470351 : r8470372;
        double r8470374 = r8470353 ? r8470357 : r8470373;
        double r8470375 = r8470347 ? r8470351 : r8470374;
        double r8470376 = r8470332 ? r8470345 : r8470375;
        return r8470376;
}

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.5
Target32.7
Herbie26.9
\[\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 5 regimes
  2. if re < -2.6219396713989246e+28

    1. Initial program 56.5

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

      \[\leadsto 0.5 \cdot \sqrt{2.0 \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/56.5

      \[\leadsto 0.5 \cdot \sqrt{\color{blue}{\frac{2.0 \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-div56.5

      \[\leadsto 0.5 \cdot \color{blue}{\frac{\sqrt{2.0 \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. Simplified39.6

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

    if -2.6219396713989246e+28 < re < -3.0560575984185278e-28 or -2.4751289839842727e-197 < re < -1.0467551994962917e-267

    1. Initial program 38.3

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

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

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

    if -3.0560575984185278e-28 < re < -2.4751289839842727e-197

    1. Initial program 33.3

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

      \[\leadsto 0.5 \cdot \sqrt{2.0 \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. Simplified28.7

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

    if -1.0467551994962917e-267 < re < 9.007455771870733e+76

    1. Initial program 21.4

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

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

    if 9.007455771870733e+76 < re

    1. Initial program 45.8

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -2.6219396713989246 \cdot 10^{+28}:\\ \;\;\;\;\frac{\sqrt{\left(im \cdot im\right) \cdot 2.0}}{\sqrt{\sqrt{im \cdot im + re \cdot re} - re}} \cdot 0.5\\ \mathbf{elif}\;re \le -3.0560575984185278 \cdot 10^{-28}:\\ \;\;\;\;\sqrt{2.0 \cdot \left(im + re\right)} \cdot 0.5\\ \mathbf{elif}\;re \le -2.4751289839842727 \cdot 10^{-197}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \frac{im \cdot im}{\sqrt{im \cdot im + re \cdot re} - re}}\\ \mathbf{elif}\;re \le -1.0467551994962917 \cdot 10^{-267}:\\ \;\;\;\;\sqrt{2.0 \cdot \left(im + re\right)} \cdot 0.5\\ \mathbf{elif}\;re \le 9.007455771870733 \cdot 10^{+76}:\\ \;\;\;\;0.5 \cdot \left(\sqrt{\sqrt{\left(re + \sqrt{im \cdot im + re \cdot re}\right) \cdot 2.0}} \cdot \sqrt{\sqrt{\left(re + \sqrt{im \cdot im + re \cdot re}\right) \cdot 2.0}}\right)\\ \mathbf{else}:\\ \;\;\;\;\sqrt{\left(re + re\right) \cdot 2.0} \cdot 0.5\\ \end{array}\]

Reproduce

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