Average Error: 38.4 → 27.0
Time: 3.9s
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.617907908010069025826796894817450794034 \cdot 10^{120}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\ \mathbf{elif}\;re \le 4.297855652337577417946883332120350061642 \cdot 10^{-301}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{\sqrt{re \cdot re + im \cdot im} - re} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im} - re}\right)}\\ \mathbf{elif}\;re \le 2.268707743098186245908624100287446499225 \cdot 10^{-218}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{im \cdot im + 0}{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.617907908010069025826796894817450794034 \cdot 10^{120}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\

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

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

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

\end{array}
double f(double re, double im) {
        double r15156 = 0.5;
        double r15157 = 2.0;
        double r15158 = re;
        double r15159 = r15158 * r15158;
        double r15160 = im;
        double r15161 = r15160 * r15160;
        double r15162 = r15159 + r15161;
        double r15163 = sqrt(r15162);
        double r15164 = r15163 - r15158;
        double r15165 = r15157 * r15164;
        double r15166 = sqrt(r15165);
        double r15167 = r15156 * r15166;
        return r15167;
}

double f(double re, double im) {
        double r15168 = re;
        double r15169 = -1.617907908010069e+120;
        bool r15170 = r15168 <= r15169;
        double r15171 = 0.5;
        double r15172 = 2.0;
        double r15173 = -2.0;
        double r15174 = r15173 * r15168;
        double r15175 = r15172 * r15174;
        double r15176 = sqrt(r15175);
        double r15177 = r15171 * r15176;
        double r15178 = 4.2978556523375774e-301;
        bool r15179 = r15168 <= r15178;
        double r15180 = r15168 * r15168;
        double r15181 = im;
        double r15182 = r15181 * r15181;
        double r15183 = r15180 + r15182;
        double r15184 = sqrt(r15183);
        double r15185 = r15184 - r15168;
        double r15186 = sqrt(r15185);
        double r15187 = r15186 * r15186;
        double r15188 = r15172 * r15187;
        double r15189 = sqrt(r15188);
        double r15190 = r15171 * r15189;
        double r15191 = 2.268707743098186e-218;
        bool r15192 = r15168 <= r15191;
        double r15193 = r15181 - r15168;
        double r15194 = r15172 * r15193;
        double r15195 = sqrt(r15194);
        double r15196 = r15171 * r15195;
        double r15197 = 0.0;
        double r15198 = r15182 + r15197;
        double r15199 = r15168 + r15184;
        double r15200 = r15198 / r15199;
        double r15201 = r15172 * r15200;
        double r15202 = sqrt(r15201);
        double r15203 = r15171 * r15202;
        double r15204 = r15192 ? r15196 : r15203;
        double r15205 = r15179 ? r15190 : r15204;
        double r15206 = r15170 ? r15177 : r15205;
        return r15206;
}

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 < -1.617907908010069e+120

    1. Initial program 54.3

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

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

    if -1.617907908010069e+120 < re < 4.2978556523375774e-301

    1. Initial program 20.2

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

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

    if 4.2978556523375774e-301 < re < 2.268707743098186e-218

    1. Initial program 30.8

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

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

    if 2.268707743098186e-218 < re

    1. Initial program 48.9

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

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

      \[\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 flip--49.7

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

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \frac{\color{blue}{im \cdot im + 0}}{\sqrt{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im}} + re}}\]
    8. Simplified37.1

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -1.617907908010069025826796894817450794034 \cdot 10^{120}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\ \mathbf{elif}\;re \le 4.297855652337577417946883332120350061642 \cdot 10^{-301}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{\sqrt{re \cdot re + im \cdot im} - re} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im} - re}\right)}\\ \mathbf{elif}\;re \le 2.268707743098186245908624100287446499225 \cdot 10^{-218}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{im \cdot im + 0}{re + \sqrt{re \cdot re + im \cdot im}}}\\ \end{array}\]

Reproduce

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