Average Error: 38.8 → 18.9
Time: 12.9s
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 -4.019634613598924703951801238213161238145 \cdot 10^{134}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left(-re\right) - re\right)}\\ \mathbf{elif}\;re \le -5.906464274638443054311194221032669730935 \cdot 10^{-269}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im}} - re\right)}\\ \mathbf{elif}\;re \le 3.612698340849465609622753377394501158549 \cdot 10^{150}:\\ \;\;\;\;0.5 \cdot \frac{\sqrt{2}}{\frac{\sqrt{\sqrt{re \cdot re + im \cdot im} + re}}{\left|im\right|}}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \frac{\sqrt{\left(im \cdot im\right) \cdot 2}}{\sqrt{2 \cdot re}}\\ \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 -4.019634613598924703951801238213161238145 \cdot 10^{134}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left(-re\right) - re\right)}\\

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

\mathbf{elif}\;re \le 3.612698340849465609622753377394501158549 \cdot 10^{150}:\\
\;\;\;\;0.5 \cdot \frac{\sqrt{2}}{\frac{\sqrt{\sqrt{re \cdot re + im \cdot im} + re}}{\left|im\right|}}\\

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

\end{array}
double f(double re, double im) {
        double r26651 = 0.5;
        double r26652 = 2.0;
        double r26653 = re;
        double r26654 = r26653 * r26653;
        double r26655 = im;
        double r26656 = r26655 * r26655;
        double r26657 = r26654 + r26656;
        double r26658 = sqrt(r26657);
        double r26659 = r26658 - r26653;
        double r26660 = r26652 * r26659;
        double r26661 = sqrt(r26660);
        double r26662 = r26651 * r26661;
        return r26662;
}

double f(double re, double im) {
        double r26663 = re;
        double r26664 = -4.019634613598925e+134;
        bool r26665 = r26663 <= r26664;
        double r26666 = 0.5;
        double r26667 = 2.0;
        double r26668 = -r26663;
        double r26669 = r26668 - r26663;
        double r26670 = r26667 * r26669;
        double r26671 = sqrt(r26670);
        double r26672 = r26666 * r26671;
        double r26673 = -5.906464274638443e-269;
        bool r26674 = r26663 <= r26673;
        double r26675 = r26663 * r26663;
        double r26676 = im;
        double r26677 = r26676 * r26676;
        double r26678 = r26675 + r26677;
        double r26679 = sqrt(r26678);
        double r26680 = sqrt(r26679);
        double r26681 = r26680 * r26680;
        double r26682 = r26681 - r26663;
        double r26683 = r26667 * r26682;
        double r26684 = sqrt(r26683);
        double r26685 = r26666 * r26684;
        double r26686 = 3.6126983408494656e+150;
        bool r26687 = r26663 <= r26686;
        double r26688 = sqrt(r26667);
        double r26689 = r26679 + r26663;
        double r26690 = sqrt(r26689);
        double r26691 = fabs(r26676);
        double r26692 = r26690 / r26691;
        double r26693 = r26688 / r26692;
        double r26694 = r26666 * r26693;
        double r26695 = r26677 * r26667;
        double r26696 = sqrt(r26695);
        double r26697 = 2.0;
        double r26698 = r26697 * r26663;
        double r26699 = sqrt(r26698);
        double r26700 = r26696 / r26699;
        double r26701 = r26666 * r26700;
        double r26702 = r26687 ? r26694 : r26701;
        double r26703 = r26674 ? r26685 : r26702;
        double r26704 = r26665 ? r26672 : r26703;
        return r26704;
}

Error

Bits error versus re

Bits error versus im

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Split input into 4 regimes
  2. if re < -4.019634613598925e+134

    1. Initial program 58.4

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

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\color{blue}{-1 \cdot re} - re\right)}\]
    3. Simplified8.5

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

    if -4.019634613598925e+134 < re < -5.906464274638443e-269

    1. Initial program 20.0

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

      \[\leadsto 0.5 \cdot \sqrt{2 \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-prod20.1

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

    if -5.906464274638443e-269 < re < 3.6126983408494656e+150

    1. Initial program 39.2

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

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

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

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

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

      \[\leadsto 0.5 \cdot \frac{\color{blue}{\sqrt{2} \cdot \sqrt{im \cdot im + 0}}}{\sqrt{\sqrt{re \cdot re + im \cdot im} + re}}\]
    9. Applied associate-/l*30.0

      \[\leadsto 0.5 \cdot \color{blue}{\frac{\sqrt{2}}{\frac{\sqrt{\sqrt{re \cdot re + im \cdot im} + re}}{\sqrt{im \cdot im + 0}}}}\]
    10. Simplified21.1

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

    if 3.6126983408494656e+150 < re

    1. Initial program 63.8

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

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

      \[\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-div63.8

      \[\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. Simplified49.1

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -4.019634613598924703951801238213161238145 \cdot 10^{134}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left(-re\right) - re\right)}\\ \mathbf{elif}\;re \le -5.906464274638443054311194221032669730935 \cdot 10^{-269}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im}} - re\right)}\\ \mathbf{elif}\;re \le 3.612698340849465609622753377394501158549 \cdot 10^{150}:\\ \;\;\;\;0.5 \cdot \frac{\sqrt{2}}{\frac{\sqrt{\sqrt{re \cdot re + im \cdot im} + re}}{\left|im\right|}}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \frac{\sqrt{\left(im \cdot im\right) \cdot 2}}{\sqrt{2 \cdot re}}\\ \end{array}\]

Reproduce

herbie shell --seed 2019208 
(FPCore (re im)
  :name "math.sqrt on complex, imaginary part, im greater than 0 branch"
  :precision binary64
  (* 0.5 (sqrt (* 2 (- (sqrt (+ (* re re) (* im im))) re)))))