Average Error: 38.4 → 26.3
Time: 4.0s
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 -1.4667592323261061 \cdot 10^{131}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\ \mathbf{elif}\;re \le -5.17210716716597531 \cdot 10^{-306}:\\ \;\;\;\;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{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{{im}^{2}}{re + \sqrt{re \cdot re + im \cdot im}}}\\ \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 -1.4667592323261061 \cdot 10^{131}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\

\mathbf{elif}\;re \le -5.17210716716597531 \cdot 10^{-306}:\\
\;\;\;\;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{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{{im}^{2}}{re + \sqrt{re \cdot re + im \cdot im}}}\\

\end{array}
double f(double re, double im) {
        double r15049 = 0.5;
        double r15050 = 2.0;
        double r15051 = re;
        double r15052 = r15051 * r15051;
        double r15053 = im;
        double r15054 = r15053 * r15053;
        double r15055 = r15052 + r15054;
        double r15056 = sqrt(r15055);
        double r15057 = r15056 - r15051;
        double r15058 = r15050 * r15057;
        double r15059 = sqrt(r15058);
        double r15060 = r15049 * r15059;
        return r15060;
}

double f(double re, double im) {
        double r15061 = re;
        double r15062 = -1.4667592323261061e+131;
        bool r15063 = r15061 <= r15062;
        double r15064 = 0.5;
        double r15065 = 2.0;
        double r15066 = -2.0;
        double r15067 = r15066 * r15061;
        double r15068 = r15065 * r15067;
        double r15069 = sqrt(r15068);
        double r15070 = r15064 * r15069;
        double r15071 = -5.172107167165975e-306;
        bool r15072 = r15061 <= r15071;
        double r15073 = r15061 * r15061;
        double r15074 = im;
        double r15075 = r15074 * r15074;
        double r15076 = r15073 + r15075;
        double r15077 = sqrt(r15076);
        double r15078 = sqrt(r15077);
        double r15079 = r15078 * r15078;
        double r15080 = r15079 - r15061;
        double r15081 = r15065 * r15080;
        double r15082 = sqrt(r15081);
        double r15083 = r15064 * r15082;
        double r15084 = 2.0;
        double r15085 = pow(r15074, r15084);
        double r15086 = r15061 + r15077;
        double r15087 = r15085 / r15086;
        double r15088 = r15065 * r15087;
        double r15089 = sqrt(r15088);
        double r15090 = r15064 * r15089;
        double r15091 = r15072 ? r15083 : r15090;
        double r15092 = r15063 ? r15070 : r15091;
        return r15092;
}

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 3 regimes
  2. if re < -1.4667592323261061e+131

    1. Initial program 58.9

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

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

    if -1.4667592323261061e+131 < re < -5.172107167165975e-306

    1. Initial program 20.1

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

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\color{blue}{e^{\log \left(\sqrt{re \cdot re + im \cdot im}\right)}} - re\right)}\]
    4. Using strategy rm
    5. Applied add-sqr-sqrt22.4

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(e^{\log \left(\sqrt{\color{blue}{\sqrt{re \cdot re + im \cdot im} \cdot \sqrt{re \cdot re + im \cdot im}}}\right)} - re\right)}\]
    6. Applied sqrt-prod22.4

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(e^{\log \color{blue}{\left(\sqrt{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im}}\right)}} - re\right)}\]
    7. Applied log-prod22.4

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(e^{\color{blue}{\log \left(\sqrt{\sqrt{re \cdot re + im \cdot im}}\right) + \log \left(\sqrt{\sqrt{re \cdot re + im \cdot im}}\right)}} - re\right)}\]
    8. Applied exp-sum22.4

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\color{blue}{e^{\log \left(\sqrt{\sqrt{re \cdot re + im \cdot im}}\right)} \cdot e^{\log \left(\sqrt{\sqrt{re \cdot re + im \cdot im}}\right)}} - re\right)}\]
    9. Simplified21.9

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\color{blue}{\sqrt{\sqrt{re \cdot re + im \cdot im}}} \cdot e^{\log \left(\sqrt{\sqrt{re \cdot re + im \cdot im}}\right)} - re\right)}\]
    10. Simplified20.2

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

    if -5.172107167165975e-306 < re

    1. Initial program 45.7

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

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\color{blue}{e^{\log \left(\sqrt{re \cdot re + im \cdot im}\right)}} - re\right)}\]
    4. Using strategy rm
    5. Applied flip--47.9

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \color{blue}{\frac{e^{\log \left(\sqrt{re \cdot re + im \cdot im}\right)} \cdot e^{\log \left(\sqrt{re \cdot re + im \cdot im}\right)} - re \cdot re}{e^{\log \left(\sqrt{re \cdot re + im \cdot im}\right)} + re}}}\]
    6. Simplified37.2

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \frac{\color{blue}{{im}^{2}}}{e^{\log \left(\sqrt{re \cdot re + im \cdot im}\right)} + re}}\]
    7. Simplified35.9

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -1.4667592323261061 \cdot 10^{131}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\ \mathbf{elif}\;re \le -5.17210716716597531 \cdot 10^{-306}:\\ \;\;\;\;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{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{{im}^{2}}{re + \sqrt{re \cdot re + im \cdot im}}}\\ \end{array}\]

Reproduce

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