Average Error: 38.3 → 24.4
Time: 4.1s
Precision: 64
\[0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\]
\[\begin{array}{l} \mathbf{if}\;im \le -2.5049311841338231 \cdot 10^{32}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-\left(re + im\right)\right)}\\ \mathbf{elif}\;im \le -1.9966008063578885 \cdot 10^{-140}:\\ \;\;\;\;0.5 \cdot \frac{\sqrt{2}}{\frac{\sqrt{\sqrt{re \cdot re + im \cdot im} + re}}{\left|im\right|}}\\ \mathbf{elif}\;im \le -3.01639347464622636 \cdot 10^{-204}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-1 \cdot re - re\right)}\\ \mathbf{elif}\;im \le -4.18314743586454744 \cdot 10^{-212}:\\ \;\;\;\;0.5 \cdot \frac{\sqrt{2} \cdot \left|im\right|}{\sqrt{re + re}}\\ \mathbf{elif}\;im \le 1.44934742306435742 \cdot 10^{-115}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-1 \cdot re - re\right)}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - 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}\;im \le -2.5049311841338231 \cdot 10^{32}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-\left(re + im\right)\right)}\\

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

\mathbf{elif}\;im \le -3.01639347464622636 \cdot 10^{-204}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-1 \cdot re - re\right)}\\

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

\mathbf{elif}\;im \le 1.44934742306435742 \cdot 10^{-115}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-1 \cdot re - re\right)}\\

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

\end{array}
double f(double re, double im) {
        double r19649 = 0.5;
        double r19650 = 2.0;
        double r19651 = re;
        double r19652 = r19651 * r19651;
        double r19653 = im;
        double r19654 = r19653 * r19653;
        double r19655 = r19652 + r19654;
        double r19656 = sqrt(r19655);
        double r19657 = r19656 - r19651;
        double r19658 = r19650 * r19657;
        double r19659 = sqrt(r19658);
        double r19660 = r19649 * r19659;
        return r19660;
}

double f(double re, double im) {
        double r19661 = im;
        double r19662 = -2.504931184133823e+32;
        bool r19663 = r19661 <= r19662;
        double r19664 = 0.5;
        double r19665 = 2.0;
        double r19666 = re;
        double r19667 = r19666 + r19661;
        double r19668 = -r19667;
        double r19669 = r19665 * r19668;
        double r19670 = sqrt(r19669);
        double r19671 = r19664 * r19670;
        double r19672 = -1.9966008063578885e-140;
        bool r19673 = r19661 <= r19672;
        double r19674 = sqrt(r19665);
        double r19675 = r19666 * r19666;
        double r19676 = r19661 * r19661;
        double r19677 = r19675 + r19676;
        double r19678 = sqrt(r19677);
        double r19679 = r19678 + r19666;
        double r19680 = sqrt(r19679);
        double r19681 = fabs(r19661);
        double r19682 = r19680 / r19681;
        double r19683 = r19674 / r19682;
        double r19684 = r19664 * r19683;
        double r19685 = -3.0163934746462264e-204;
        bool r19686 = r19661 <= r19685;
        double r19687 = -1.0;
        double r19688 = r19687 * r19666;
        double r19689 = r19688 - r19666;
        double r19690 = r19665 * r19689;
        double r19691 = sqrt(r19690);
        double r19692 = r19664 * r19691;
        double r19693 = -4.1831474358645474e-212;
        bool r19694 = r19661 <= r19693;
        double r19695 = r19674 * r19681;
        double r19696 = r19666 + r19666;
        double r19697 = sqrt(r19696);
        double r19698 = r19695 / r19697;
        double r19699 = r19664 * r19698;
        double r19700 = 1.4493474230643574e-115;
        bool r19701 = r19661 <= r19700;
        double r19702 = r19661 - r19666;
        double r19703 = r19665 * r19702;
        double r19704 = sqrt(r19703);
        double r19705 = r19664 * r19704;
        double r19706 = r19701 ? r19692 : r19705;
        double r19707 = r19694 ? r19699 : r19706;
        double r19708 = r19686 ? r19692 : r19707;
        double r19709 = r19673 ? r19684 : r19708;
        double r19710 = r19663 ? r19671 : r19709;
        return r19710;
}

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 im < -2.504931184133823e+32

    1. Initial program 43.6

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

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

      \[\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 14.3

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

    if -2.504931184133823e+32 < im < -1.9966008063578885e-140

    1. Initial program 25.0

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

      \[\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. Simplified26.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 associate-*r/26.8

      \[\leadsto 0.5 \cdot \sqrt{\color{blue}{\frac{2 \cdot {im}^{2}}{\sqrt{re \cdot re + im \cdot im} + re}}}\]
    7. Applied sqrt-div26.0

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

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

      \[\leadsto 0.5 \cdot \frac{\sqrt{2} \cdot \color{blue}{\left|im\right|}}{\sqrt{\sqrt{re \cdot re + im \cdot im} + re}}\]
    11. Using strategy rm
    12. Applied associate-/l*26.1

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

    if -1.9966008063578885e-140 < im < -3.0163934746462264e-204 or -4.1831474358645474e-212 < im < 1.4493474230643574e-115

    1. Initial program 42.9

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

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

    if -3.0163934746462264e-204 < im < -4.1831474358645474e-212

    1. Initial program 46.6

      \[0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\]
    2. Using strategy rm
    3. Applied flip--62.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. Simplified54.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 associate-*r/54.8

      \[\leadsto 0.5 \cdot \sqrt{\color{blue}{\frac{2 \cdot {im}^{2}}{\sqrt{re \cdot re + im \cdot im} + re}}}\]
    7. Applied sqrt-div55.0

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

      \[\leadsto 0.5 \cdot \frac{\color{blue}{\sqrt{2} \cdot \sqrt{{im}^{2}}}}{\sqrt{\sqrt{re \cdot re + im \cdot im} + re}}\]
    10. Simplified41.8

      \[\leadsto 0.5 \cdot \frac{\sqrt{2} \cdot \color{blue}{\left|im\right|}}{\sqrt{\sqrt{re \cdot re + im \cdot im} + re}}\]
    11. Taylor expanded around inf 34.3

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

    if 1.4493474230643574e-115 < im

    1. Initial program 36.6

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

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\color{blue}{im} - re\right)}\]
  3. Recombined 5 regimes into one program.
  4. Final simplification24.4

    \[\leadsto \begin{array}{l} \mathbf{if}\;im \le -2.5049311841338231 \cdot 10^{32}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-\left(re + im\right)\right)}\\ \mathbf{elif}\;im \le -1.9966008063578885 \cdot 10^{-140}:\\ \;\;\;\;0.5 \cdot \frac{\sqrt{2}}{\frac{\sqrt{\sqrt{re \cdot re + im \cdot im} + re}}{\left|im\right|}}\\ \mathbf{elif}\;im \le -3.01639347464622636 \cdot 10^{-204}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-1 \cdot re - re\right)}\\ \mathbf{elif}\;im \le -4.18314743586454744 \cdot 10^{-212}:\\ \;\;\;\;0.5 \cdot \frac{\sqrt{2} \cdot \left|im\right|}{\sqrt{re + re}}\\ \mathbf{elif}\;im \le 1.44934742306435742 \cdot 10^{-115}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-1 \cdot re - re\right)}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\ \end{array}\]

Reproduce

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