Average Error: 38.9 → 28.1
Time: 4.5s
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 -8789989068572990460:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\ \mathbf{elif}\;re \le -2.41337729739384158 \cdot 10^{-231}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\\ \mathbf{elif}\;re \le 1.67371517749345966 \cdot 10^{-296}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\ \mathbf{elif}\;re \le 9.62048641274337938 \cdot 10^{-76}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{{im}^{2}}{\sqrt{re \cdot re + im \cdot im} + re}}\\ \mathbf{elif}\;re \le 1.3595218621366488 \cdot 10^{-48}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\ \mathbf{elif}\;re \le 5.49158337111390768 \cdot 10^{68}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{{im}^{2}}{\sqrt{re \cdot re + im \cdot im} + re}}\\ \mathbf{elif}\;re \le 1.90167338956394558 \cdot 10^{88}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{{im}^{2}}{\sqrt{re \cdot re + im \cdot 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 -8789989068572990460:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\

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

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

\mathbf{elif}\;re \le 9.62048641274337938 \cdot 10^{-76}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{{im}^{2}}{\sqrt{re \cdot re + im \cdot im} + re}}\\

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

\mathbf{elif}\;re \le 5.49158337111390768 \cdot 10^{68}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{{im}^{2}}{\sqrt{re \cdot re + im \cdot im} + re}}\\

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

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

\end{array}
double f(double re, double im) {
        double r12867 = 0.5;
        double r12868 = 2.0;
        double r12869 = re;
        double r12870 = r12869 * r12869;
        double r12871 = im;
        double r12872 = r12871 * r12871;
        double r12873 = r12870 + r12872;
        double r12874 = sqrt(r12873);
        double r12875 = r12874 - r12869;
        double r12876 = r12868 * r12875;
        double r12877 = sqrt(r12876);
        double r12878 = r12867 * r12877;
        return r12878;
}

double f(double re, double im) {
        double r12879 = re;
        double r12880 = -8.78998906857299e+18;
        bool r12881 = r12879 <= r12880;
        double r12882 = 0.5;
        double r12883 = 2.0;
        double r12884 = -2.0;
        double r12885 = r12884 * r12879;
        double r12886 = r12883 * r12885;
        double r12887 = sqrt(r12886);
        double r12888 = r12882 * r12887;
        double r12889 = -2.4133772973938416e-231;
        bool r12890 = r12879 <= r12889;
        double r12891 = r12879 * r12879;
        double r12892 = im;
        double r12893 = r12892 * r12892;
        double r12894 = r12891 + r12893;
        double r12895 = sqrt(r12894);
        double r12896 = r12895 - r12879;
        double r12897 = r12883 * r12896;
        double r12898 = sqrt(r12897);
        double r12899 = r12882 * r12898;
        double r12900 = 1.6737151774934597e-296;
        bool r12901 = r12879 <= r12900;
        double r12902 = r12892 - r12879;
        double r12903 = r12883 * r12902;
        double r12904 = sqrt(r12903);
        double r12905 = r12882 * r12904;
        double r12906 = 9.620486412743379e-76;
        bool r12907 = r12879 <= r12906;
        double r12908 = 2.0;
        double r12909 = pow(r12892, r12908);
        double r12910 = r12895 + r12879;
        double r12911 = r12909 / r12910;
        double r12912 = r12883 * r12911;
        double r12913 = sqrt(r12912);
        double r12914 = r12882 * r12913;
        double r12915 = 1.3595218621366488e-48;
        bool r12916 = r12879 <= r12915;
        double r12917 = 5.491583371113908e+68;
        bool r12918 = r12879 <= r12917;
        double r12919 = 1.9016733895639456e+88;
        bool r12920 = r12879 <= r12919;
        double r12921 = r12920 ? r12905 : r12914;
        double r12922 = r12918 ? r12914 : r12921;
        double r12923 = r12916 ? r12905 : r12922;
        double r12924 = r12907 ? r12914 : r12923;
        double r12925 = r12901 ? r12905 : r12924;
        double r12926 = r12890 ? r12899 : r12925;
        double r12927 = r12881 ? r12888 : r12926;
        return r12927;
}

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 < -8.78998906857299e+18

    1. Initial program 42.6

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

      \[\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-prod42.6

      \[\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)}\]
    5. Using strategy rm
    6. Applied add-exp-log44.0

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

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

    if -8.78998906857299e+18 < re < -2.4133772973938416e-231

    1. Initial program 18.6

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

    if -2.4133772973938416e-231 < re < 1.6737151774934597e-296 or 9.620486412743379e-76 < re < 1.3595218621366488e-48 or 5.491583371113908e+68 < re < 1.9016733895639456e+88

    1. Initial program 36.0

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

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

    if 1.6737151774934597e-296 < re < 9.620486412743379e-76 or 1.3595218621366488e-48 < re < 5.491583371113908e+68 or 1.9016733895639456e+88 < re

    1. Initial program 46.8

      \[0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\]
    2. Using strategy rm
    3. Applied flip--46.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. Simplified36.9

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -8789989068572990460:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\ \mathbf{elif}\;re \le -2.41337729739384158 \cdot 10^{-231}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\\ \mathbf{elif}\;re \le 1.67371517749345966 \cdot 10^{-296}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\ \mathbf{elif}\;re \le 9.62048641274337938 \cdot 10^{-76}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{{im}^{2}}{\sqrt{re \cdot re + im \cdot im} + re}}\\ \mathbf{elif}\;re \le 1.3595218621366488 \cdot 10^{-48}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\ \mathbf{elif}\;re \le 5.49158337111390768 \cdot 10^{68}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{{im}^{2}}{\sqrt{re \cdot re + im \cdot im} + re}}\\ \mathbf{elif}\;re \le 1.90167338956394558 \cdot 10^{88}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{{im}^{2}}{\sqrt{re \cdot re + im \cdot im} + re}}\\ \end{array}\]

Reproduce

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