Average Error: 38.2 → 19.4
Time: 4.8s
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 -3.6980740601030615 \cdot 10^{63}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-1 \cdot re - re\right)}\\ \mathbf{elif}\;re \le -3.84643118014252533 \cdot 10^{-178}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\\ \mathbf{elif}\;re \le 1.13670705319239887 \cdot 10^{-287}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-\left(re + im\right)\right)}\\ \mathbf{elif}\;re \le 1.3214275905413451 \cdot 10^{154}:\\ \;\;\;\;0.5 \cdot \left(\sqrt{2} \cdot \left(\sqrt{\frac{1}{\sqrt{re \cdot re + im \cdot im} + re}} \cdot \left|im\right|\right)\right)\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{im}{2 \cdot \frac{re}{im} + \frac{1}{2} \cdot \frac{im}{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 -3.6980740601030615 \cdot 10^{63}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-1 \cdot re - re\right)}\\

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

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

\mathbf{elif}\;re \le 1.3214275905413451 \cdot 10^{154}:\\
\;\;\;\;0.5 \cdot \left(\sqrt{2} \cdot \left(\sqrt{\frac{1}{\sqrt{re \cdot re + im \cdot im} + re}} \cdot \left|im\right|\right)\right)\\

\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{im}{2 \cdot \frac{re}{im} + \frac{1}{2} \cdot \frac{im}{re}}}\\

\end{array}
double f(double re, double im) {
        double r23615 = 0.5;
        double r23616 = 2.0;
        double r23617 = re;
        double r23618 = r23617 * r23617;
        double r23619 = im;
        double r23620 = r23619 * r23619;
        double r23621 = r23618 + r23620;
        double r23622 = sqrt(r23621);
        double r23623 = r23622 - r23617;
        double r23624 = r23616 * r23623;
        double r23625 = sqrt(r23624);
        double r23626 = r23615 * r23625;
        return r23626;
}

double f(double re, double im) {
        double r23627 = re;
        double r23628 = -3.6980740601030615e+63;
        bool r23629 = r23627 <= r23628;
        double r23630 = 0.5;
        double r23631 = 2.0;
        double r23632 = -1.0;
        double r23633 = r23632 * r23627;
        double r23634 = r23633 - r23627;
        double r23635 = r23631 * r23634;
        double r23636 = sqrt(r23635);
        double r23637 = r23630 * r23636;
        double r23638 = -3.8464311801425253e-178;
        bool r23639 = r23627 <= r23638;
        double r23640 = r23627 * r23627;
        double r23641 = im;
        double r23642 = r23641 * r23641;
        double r23643 = r23640 + r23642;
        double r23644 = sqrt(r23643);
        double r23645 = r23644 - r23627;
        double r23646 = r23631 * r23645;
        double r23647 = sqrt(r23646);
        double r23648 = r23630 * r23647;
        double r23649 = 1.1367070531923989e-287;
        bool r23650 = r23627 <= r23649;
        double r23651 = r23627 + r23641;
        double r23652 = -r23651;
        double r23653 = r23631 * r23652;
        double r23654 = sqrt(r23653);
        double r23655 = r23630 * r23654;
        double r23656 = 1.3214275905413451e+154;
        bool r23657 = r23627 <= r23656;
        double r23658 = sqrt(r23631);
        double r23659 = 1.0;
        double r23660 = r23644 + r23627;
        double r23661 = r23659 / r23660;
        double r23662 = sqrt(r23661);
        double r23663 = fabs(r23641);
        double r23664 = r23662 * r23663;
        double r23665 = r23658 * r23664;
        double r23666 = r23630 * r23665;
        double r23667 = 2.0;
        double r23668 = r23627 / r23641;
        double r23669 = r23667 * r23668;
        double r23670 = 0.5;
        double r23671 = r23641 / r23627;
        double r23672 = r23670 * r23671;
        double r23673 = r23669 + r23672;
        double r23674 = r23641 / r23673;
        double r23675 = r23631 * r23674;
        double r23676 = sqrt(r23675);
        double r23677 = r23630 * r23676;
        double r23678 = r23657 ? r23666 : r23677;
        double r23679 = r23650 ? r23655 : r23678;
        double r23680 = r23639 ? r23648 : r23679;
        double r23681 = r23629 ? r23637 : r23680;
        return r23681;
}

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 5 regimes
  2. if re < -3.6980740601030615e+63

    1. Initial program 46.0

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

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

    if -3.6980740601030615e+63 < re < -3.8464311801425253e-178

    1. Initial program 16.5

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

    if -3.8464311801425253e-178 < re < 1.1367070531923989e-287

    1. Initial program 28.0

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

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

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \frac{\color{blue}{{im}^{2}}}{\sqrt{re \cdot re + im \cdot im} + re}}\]
    5. Taylor expanded around -inf 33.9

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

    if 1.1367070531923989e-287 < re < 1.3214275905413451e+154

    1. Initial program 39.8

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

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

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \frac{\color{blue}{{im}^{2}}}{\sqrt{re \cdot re + im \cdot im} + re}}\]
    5. Using strategy rm
    6. Applied unpow230.8

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

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \color{blue}{\frac{im}{\frac{\sqrt{re \cdot re + im \cdot im} + re}{im}}}}\]
    8. Using strategy rm
    9. Applied sqrt-prod28.6

      \[\leadsto 0.5 \cdot \color{blue}{\left(\sqrt{2} \cdot \sqrt{\frac{im}{\frac{\sqrt{re \cdot re + im \cdot im} + re}{im}}}\right)}\]
    10. Using strategy rm
    11. Applied div-inv28.6

      \[\leadsto 0.5 \cdot \left(\sqrt{2} \cdot \sqrt{\frac{im}{\color{blue}{\left(\sqrt{re \cdot re + im \cdot im} + re\right) \cdot \frac{1}{im}}}}\right)\]
    12. Applied *-un-lft-identity28.6

      \[\leadsto 0.5 \cdot \left(\sqrt{2} \cdot \sqrt{\frac{\color{blue}{1 \cdot im}}{\left(\sqrt{re \cdot re + im \cdot im} + re\right) \cdot \frac{1}{im}}}\right)\]
    13. Applied times-frac31.0

      \[\leadsto 0.5 \cdot \left(\sqrt{2} \cdot \sqrt{\color{blue}{\frac{1}{\sqrt{re \cdot re + im \cdot im} + re} \cdot \frac{im}{\frac{1}{im}}}}\right)\]
    14. Applied sqrt-prod29.9

      \[\leadsto 0.5 \cdot \left(\sqrt{2} \cdot \color{blue}{\left(\sqrt{\frac{1}{\sqrt{re \cdot re + im \cdot im} + re}} \cdot \sqrt{\frac{im}{\frac{1}{im}}}\right)}\right)\]
    15. Simplified19.5

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

    if 1.3214275905413451e+154 < re

    1. Initial program 64.0

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

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

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \frac{\color{blue}{{im}^{2}}}{\sqrt{re \cdot re + im \cdot im} + re}}\]
    5. Using strategy rm
    6. Applied unpow251.3

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

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \color{blue}{\frac{im}{\frac{\sqrt{re \cdot re + im \cdot im} + re}{im}}}}\]
    8. Taylor expanded around inf 21.8

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \frac{im}{\color{blue}{2 \cdot \frac{re}{im} + \frac{1}{2} \cdot \frac{im}{re}}}}\]
  3. Recombined 5 regimes into one program.
  4. Final simplification19.4

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -3.6980740601030615 \cdot 10^{63}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-1 \cdot re - re\right)}\\ \mathbf{elif}\;re \le -3.84643118014252533 \cdot 10^{-178}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\\ \mathbf{elif}\;re \le 1.13670705319239887 \cdot 10^{-287}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-\left(re + im\right)\right)}\\ \mathbf{elif}\;re \le 1.3214275905413451 \cdot 10^{154}:\\ \;\;\;\;0.5 \cdot \left(\sqrt{2} \cdot \left(\sqrt{\frac{1}{\sqrt{re \cdot re + im \cdot im} + re}} \cdot \left|im\right|\right)\right)\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{im}{2 \cdot \frac{re}{im} + \frac{1}{2} \cdot \frac{im}{re}}}\\ \end{array}\]

Reproduce

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