Average Error: 38.8 → 17.8
Time: 19.7s
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.897683977595771520042626230283605489407 \cdot 10^{115}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left(-re\right) - re\right)}\\ \mathbf{elif}\;re \le -4.355700987739906589936225213989573011868 \cdot 10^{-198}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\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)}\\ \mathbf{elif}\;re \le -2.437299774034011283254659821557789091298 \cdot 10^{-288}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\ \mathbf{elif}\;re \le 8.545763741641591962502963215263134626571 \cdot 10^{113}:\\ \;\;\;\;\frac{1}{\frac{\frac{\sqrt{\sqrt{re \cdot re + im \cdot im} + re}}{\left|im\right|}}{\sqrt{2}}} \cdot 0.5\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \frac{\sqrt{2}}{\frac{\sqrt{re + re}}{\left|im\right|}}\\ \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.897683977595771520042626230283605489407 \cdot 10^{115}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left(-re\right) - re\right)}\\

\mathbf{elif}\;re \le -4.355700987739906589936225213989573011868 \cdot 10^{-198}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\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)}\\

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

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

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

\end{array}
double f(double re, double im) {
        double r27925 = 0.5;
        double r27926 = 2.0;
        double r27927 = re;
        double r27928 = r27927 * r27927;
        double r27929 = im;
        double r27930 = r27929 * r27929;
        double r27931 = r27928 + r27930;
        double r27932 = sqrt(r27931);
        double r27933 = r27932 - r27927;
        double r27934 = r27926 * r27933;
        double r27935 = sqrt(r27934);
        double r27936 = r27925 * r27935;
        return r27936;
}

double f(double re, double im) {
        double r27937 = re;
        double r27938 = -4.8976839775957715e+115;
        bool r27939 = r27937 <= r27938;
        double r27940 = 0.5;
        double r27941 = 2.0;
        double r27942 = -r27937;
        double r27943 = r27942 - r27937;
        double r27944 = r27941 * r27943;
        double r27945 = sqrt(r27944);
        double r27946 = r27940 * r27945;
        double r27947 = -4.3557009877399066e-198;
        bool r27948 = r27937 <= r27947;
        double r27949 = r27937 * r27937;
        double r27950 = im;
        double r27951 = r27950 * r27950;
        double r27952 = r27949 + r27951;
        double r27953 = sqrt(r27952);
        double r27954 = cbrt(r27953);
        double r27955 = r27954 * r27954;
        double r27956 = r27955 * r27954;
        double r27957 = r27956 - r27937;
        double r27958 = r27941 * r27957;
        double r27959 = sqrt(r27958);
        double r27960 = r27940 * r27959;
        double r27961 = -2.4372997740340113e-288;
        bool r27962 = r27937 <= r27961;
        double r27963 = r27950 - r27937;
        double r27964 = r27941 * r27963;
        double r27965 = sqrt(r27964);
        double r27966 = r27940 * r27965;
        double r27967 = 8.545763741641592e+113;
        bool r27968 = r27937 <= r27967;
        double r27969 = 1.0;
        double r27970 = r27953 + r27937;
        double r27971 = sqrt(r27970);
        double r27972 = fabs(r27950);
        double r27973 = r27971 / r27972;
        double r27974 = sqrt(r27941);
        double r27975 = r27973 / r27974;
        double r27976 = r27969 / r27975;
        double r27977 = r27976 * r27940;
        double r27978 = r27937 + r27937;
        double r27979 = sqrt(r27978);
        double r27980 = r27979 / r27972;
        double r27981 = r27974 / r27980;
        double r27982 = r27940 * r27981;
        double r27983 = r27968 ? r27977 : r27982;
        double r27984 = r27962 ? r27966 : r27983;
        double r27985 = r27948 ? r27960 : r27984;
        double r27986 = r27939 ? r27946 : r27985;
        return r27986;
}

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 < -4.8976839775957715e+115

    1. Initial program 54.9

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

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

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

    if -4.8976839775957715e+115 < re < -4.3557009877399066e-198

    1. Initial program 18.0

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

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\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 -4.3557009877399066e-198 < re < -2.4372997740340113e-288

    1. Initial program 27.7

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

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

    if -2.4372997740340113e-288 < re < 8.545763741641592e+113

    1. Initial program 38.8

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

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

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

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

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

      \[\leadsto 0.5 \cdot \frac{\sqrt{2}}{\color{blue}{\frac{\sqrt{\sqrt{re \cdot re + im \cdot im} + re}}{\left|im\right|}}}\]
    11. Using strategy rm
    12. Applied *-un-lft-identity21.4

      \[\leadsto 0.5 \cdot \frac{\sqrt{\color{blue}{1 \cdot 2}}}{\frac{\sqrt{\sqrt{re \cdot re + im \cdot im} + re}}{\left|im\right|}}\]
    13. Applied sqrt-prod21.4

      \[\leadsto 0.5 \cdot \frac{\color{blue}{\sqrt{1} \cdot \sqrt{2}}}{\frac{\sqrt{\sqrt{re \cdot re + im \cdot im} + re}}{\left|im\right|}}\]
    14. Applied associate-/l*21.4

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

    if 8.545763741641592e+113 < re

    1. Initial program 61.4

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

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

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

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

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

      \[\leadsto 0.5 \cdot \color{blue}{\frac{\sqrt{2}}{\frac{\sqrt{\sqrt{re \cdot re + im \cdot im} + re}}{\sqrt{im \cdot im}}}}\]
    10. Simplified43.6

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

      \[\leadsto 0.5 \cdot \frac{\sqrt{2}}{\frac{\sqrt{\color{blue}{re} + re}}{\left|im\right|}}\]
  3. Recombined 5 regimes into one program.
  4. Final simplification17.8

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -4.897683977595771520042626230283605489407 \cdot 10^{115}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left(-re\right) - re\right)}\\ \mathbf{elif}\;re \le -4.355700987739906589936225213989573011868 \cdot 10^{-198}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\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)}\\ \mathbf{elif}\;re \le -2.437299774034011283254659821557789091298 \cdot 10^{-288}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\ \mathbf{elif}\;re \le 8.545763741641591962502963215263134626571 \cdot 10^{113}:\\ \;\;\;\;\frac{1}{\frac{\frac{\sqrt{\sqrt{re \cdot re + im \cdot im} + re}}{\left|im\right|}}{\sqrt{2}}} \cdot 0.5\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \frac{\sqrt{2}}{\frac{\sqrt{re + re}}{\left|im\right|}}\\ \end{array}\]

Reproduce

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