Average Error: 38.9 → 23.0
Time: 19.4s
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.25223341265023233009076369086492232149 \cdot 10^{106}:\\ \;\;\;\;\frac{\sqrt{\left(im \cdot im\right) \cdot 2}}{\sqrt{-2 \cdot re}} \cdot 0.5\\ \mathbf{elif}\;re \le 2.8714878455354807468314928641279810052 \cdot 10^{-309}:\\ \;\;\;\;\sqrt{\frac{\left(im \cdot im\right) \cdot 2}{\sqrt{im \cdot im + re \cdot re} - re}} \cdot 0.5\\ \mathbf{elif}\;re \le 1.198489425005489137911557625166212280639 \cdot 10^{97}:\\ \;\;\;\;0.5 \cdot \left(\sqrt{\sqrt{2 \cdot \left(\sqrt{im \cdot im + re \cdot re} + re\right)}} \cdot \sqrt{\sqrt{2 \cdot \left(\sqrt{im \cdot im + re \cdot re} + re\right)}}\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 -1.25223341265023233009076369086492232149 \cdot 10^{106}:\\
\;\;\;\;\frac{\sqrt{\left(im \cdot im\right) \cdot 2}}{\sqrt{-2 \cdot re}} \cdot 0.5\\

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

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

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

\end{array}
double f(double re, double im) {
        double r8610523 = 0.5;
        double r8610524 = 2.0;
        double r8610525 = re;
        double r8610526 = r8610525 * r8610525;
        double r8610527 = im;
        double r8610528 = r8610527 * r8610527;
        double r8610529 = r8610526 + r8610528;
        double r8610530 = sqrt(r8610529);
        double r8610531 = r8610530 + r8610525;
        double r8610532 = r8610524 * r8610531;
        double r8610533 = sqrt(r8610532);
        double r8610534 = r8610523 * r8610533;
        return r8610534;
}

double f(double re, double im) {
        double r8610535 = re;
        double r8610536 = -1.2522334126502323e+106;
        bool r8610537 = r8610535 <= r8610536;
        double r8610538 = im;
        double r8610539 = r8610538 * r8610538;
        double r8610540 = 2.0;
        double r8610541 = r8610539 * r8610540;
        double r8610542 = sqrt(r8610541);
        double r8610543 = -2.0;
        double r8610544 = r8610543 * r8610535;
        double r8610545 = sqrt(r8610544);
        double r8610546 = r8610542 / r8610545;
        double r8610547 = 0.5;
        double r8610548 = r8610546 * r8610547;
        double r8610549 = 2.87148784553548e-309;
        bool r8610550 = r8610535 <= r8610549;
        double r8610551 = r8610535 * r8610535;
        double r8610552 = r8610539 + r8610551;
        double r8610553 = sqrt(r8610552);
        double r8610554 = r8610553 - r8610535;
        double r8610555 = r8610541 / r8610554;
        double r8610556 = sqrt(r8610555);
        double r8610557 = r8610556 * r8610547;
        double r8610558 = 1.1984894250054891e+97;
        bool r8610559 = r8610535 <= r8610558;
        double r8610560 = r8610553 + r8610535;
        double r8610561 = r8610540 * r8610560;
        double r8610562 = sqrt(r8610561);
        double r8610563 = sqrt(r8610562);
        double r8610564 = r8610563 * r8610563;
        double r8610565 = r8610547 * r8610564;
        double r8610566 = r8610535 + r8610535;
        double r8610567 = r8610540 * r8610566;
        double r8610568 = sqrt(r8610567);
        double r8610569 = r8610547 * r8610568;
        double r8610570 = r8610559 ? r8610565 : r8610569;
        double r8610571 = r8610550 ? r8610557 : r8610570;
        double r8610572 = r8610537 ? r8610548 : r8610571;
        return r8610572;
}

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.8
Herbie23.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 4 regimes
  2. if re < -1.2522334126502323e+106

    1. Initial program 61.7

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

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

      \[\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-div61.7

      \[\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. Simplified45.3

      \[\leadsto 0.5 \cdot \frac{\color{blue}{\sqrt{2 \cdot \left(im \cdot im\right)}}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\]
    7. Taylor expanded around -inf 22.9

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

    if -1.2522334126502323e+106 < re < 2.87148784553548e-309

    1. Initial program 39.0

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

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

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

      \[\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. Simplified30.5

      \[\leadsto 0.5 \cdot \frac{\color{blue}{\sqrt{2 \cdot \left(im \cdot im\right)}}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\]
    7. Using strategy rm
    8. Applied sqrt-undiv31.1

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

    if 2.87148784553548e-309 < re < 1.1984894250054891e+97

    1. Initial program 20.9

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

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

    if 1.1984894250054891e+97 < re

    1. Initial program 51.0

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -1.25223341265023233009076369086492232149 \cdot 10^{106}:\\ \;\;\;\;\frac{\sqrt{\left(im \cdot im\right) \cdot 2}}{\sqrt{-2 \cdot re}} \cdot 0.5\\ \mathbf{elif}\;re \le 2.8714878455354807468314928641279810052 \cdot 10^{-309}:\\ \;\;\;\;\sqrt{\frac{\left(im \cdot im\right) \cdot 2}{\sqrt{im \cdot im + re \cdot re} - re}} \cdot 0.5\\ \mathbf{elif}\;re \le 1.198489425005489137911557625166212280639 \cdot 10^{97}:\\ \;\;\;\;0.5 \cdot \left(\sqrt{\sqrt{2 \cdot \left(\sqrt{im \cdot im + re \cdot re} + re\right)}} \cdot \sqrt{\sqrt{2 \cdot \left(\sqrt{im \cdot im + re \cdot re} + re\right)}}\right)\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(re + re\right)}\\ \end{array}\]

Reproduce

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

  :herbie-target
  (if (< re 0.0) (* 0.5 (* (sqrt 2.0) (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)))))