Average Error: 37.4 → 26.1
Time: 37.4s
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.2294847734776152 \cdot 10^{-278}:\\ \;\;\;\;\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 9.399354552169095 \cdot 10^{-159}:\\ \;\;\;\;\sqrt{2.0 \cdot \left(im + re\right)} \cdot 0.5\\ \mathbf{elif}\;re \le 2.076516789293858 \cdot 10^{+101}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(\sqrt{\sqrt[3]{\sqrt{im \cdot im + re \cdot re}} \cdot \left(\sqrt[3]{\sqrt{im \cdot im + re \cdot re}} \cdot \sqrt[3]{\sqrt{im \cdot im + re \cdot re}}\right)} \cdot \sqrt{\sqrt{im \cdot im + re \cdot re}} + re\right) \cdot 2.0}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(re + re\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}\;re \le 2.2294847734776152 \cdot 10^{-278}:\\
\;\;\;\;\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 9.399354552169095 \cdot 10^{-159}:\\
\;\;\;\;\sqrt{2.0 \cdot \left(im + re\right)} \cdot 0.5\\

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

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

\end{array}
double f(double re, double im) {
        double r34369616 = 0.5;
        double r34369617 = 2.0;
        double r34369618 = re;
        double r34369619 = r34369618 * r34369618;
        double r34369620 = im;
        double r34369621 = r34369620 * r34369620;
        double r34369622 = r34369619 + r34369621;
        double r34369623 = sqrt(r34369622);
        double r34369624 = r34369623 + r34369618;
        double r34369625 = r34369617 * r34369624;
        double r34369626 = sqrt(r34369625);
        double r34369627 = r34369616 * r34369626;
        return r34369627;
}

double f(double re, double im) {
        double r34369628 = re;
        double r34369629 = 2.2294847734776152e-278;
        bool r34369630 = r34369628 <= r34369629;
        double r34369631 = im;
        double r34369632 = r34369631 * r34369631;
        double r34369633 = 2.0;
        double r34369634 = r34369632 * r34369633;
        double r34369635 = sqrt(r34369634);
        double r34369636 = r34369628 * r34369628;
        double r34369637 = r34369632 + r34369636;
        double r34369638 = sqrt(r34369637);
        double r34369639 = r34369638 - r34369628;
        double r34369640 = sqrt(r34369639);
        double r34369641 = r34369635 / r34369640;
        double r34369642 = 0.5;
        double r34369643 = r34369641 * r34369642;
        double r34369644 = 9.399354552169095e-159;
        bool r34369645 = r34369628 <= r34369644;
        double r34369646 = r34369631 + r34369628;
        double r34369647 = r34369633 * r34369646;
        double r34369648 = sqrt(r34369647);
        double r34369649 = r34369648 * r34369642;
        double r34369650 = 2.076516789293858e+101;
        bool r34369651 = r34369628 <= r34369650;
        double r34369652 = cbrt(r34369638);
        double r34369653 = r34369652 * r34369652;
        double r34369654 = r34369652 * r34369653;
        double r34369655 = sqrt(r34369654);
        double r34369656 = sqrt(r34369638);
        double r34369657 = r34369655 * r34369656;
        double r34369658 = r34369657 + r34369628;
        double r34369659 = r34369658 * r34369633;
        double r34369660 = sqrt(r34369659);
        double r34369661 = r34369642 * r34369660;
        double r34369662 = r34369628 + r34369628;
        double r34369663 = r34369633 * r34369662;
        double r34369664 = sqrt(r34369663);
        double r34369665 = r34369642 * r34369664;
        double r34369666 = r34369651 ? r34369661 : r34369665;
        double r34369667 = r34369645 ? r34369649 : r34369666;
        double r34369668 = r34369630 ? r34369643 : r34369667;
        return r34369668;
}

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.4
Target32.4
Herbie26.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 re < 2.2294847734776152e-278

    1. Initial program 44.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-+44.4

      \[\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/44.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-div44.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. Simplified34.0

      \[\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.2294847734776152e-278 < re < 9.399354552169095e-159

    1. Initial program 27.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-sqr-sqrt27.2

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

      \[\leadsto 0.5 \cdot \sqrt{2.0 \cdot \left(\color{blue}{\sqrt{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im}}} + re\right)}\]
    5. Taylor expanded around 0 33.4

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

    if 9.399354552169095e-159 < re < 2.076516789293858e+101

    1. Initial program 14.9

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

      \[\leadsto 0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{\color{blue}{\sqrt{re \cdot re + im \cdot im} \cdot \sqrt{re \cdot re + im \cdot im}}} + re\right)}\]
    4. Applied sqrt-prod15.0

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

      \[\leadsto 0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt{\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)}\]

    if 2.076516789293858e+101 < re

    1. Initial program 50.0

      \[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-sqrt50.0

      \[\leadsto 0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{\color{blue}{\sqrt{re \cdot re + im \cdot im} \cdot \sqrt{re \cdot re + im \cdot im}}} + re\right)}\]
    4. Applied sqrt-prod50.0

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le 2.2294847734776152 \cdot 10^{-278}:\\ \;\;\;\;\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 9.399354552169095 \cdot 10^{-159}:\\ \;\;\;\;\sqrt{2.0 \cdot \left(im + re\right)} \cdot 0.5\\ \mathbf{elif}\;re \le 2.076516789293858 \cdot 10^{+101}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(\sqrt{\sqrt[3]{\sqrt{im \cdot im + re \cdot re}} \cdot \left(\sqrt[3]{\sqrt{im \cdot im + re \cdot re}} \cdot \sqrt[3]{\sqrt{im \cdot im + re \cdot re}}\right)} \cdot \sqrt{\sqrt{im \cdot im + re \cdot re}} + re\right) \cdot 2.0}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(re + re\right)}\\ \end{array}\]

Reproduce

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