Average Error: 38.9 → 26.8
Time: 7.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 -1.491740461538726219683531543082814061521 \cdot 10^{111}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\ \mathbf{elif}\;re \le -3.528167954050153861894555232350182828574 \cdot 10^{-301}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{\sqrt{\sqrt[3]{re \cdot re + im \cdot im} \cdot \sqrt[3]{re \cdot re + im \cdot im}}} \cdot \left(\sqrt{\sqrt{\sqrt[3]{re \cdot re + im \cdot im}}} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im}}\right) - 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 -1.491740461538726219683531543082814061521 \cdot 10^{111}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\

\mathbf{elif}\;re \le -3.528167954050153861894555232350182828574 \cdot 10^{-301}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{\sqrt{\sqrt[3]{re \cdot re + im \cdot im} \cdot \sqrt[3]{re \cdot re + im \cdot im}}} \cdot \left(\sqrt{\sqrt{\sqrt[3]{re \cdot re + im \cdot im}}} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im}}\right) - 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 r23411 = 0.5;
        double r23412 = 2.0;
        double r23413 = re;
        double r23414 = r23413 * r23413;
        double r23415 = im;
        double r23416 = r23415 * r23415;
        double r23417 = r23414 + r23416;
        double r23418 = sqrt(r23417);
        double r23419 = r23418 - r23413;
        double r23420 = r23412 * r23419;
        double r23421 = sqrt(r23420);
        double r23422 = r23411 * r23421;
        return r23422;
}

double f(double re, double im) {
        double r23423 = re;
        double r23424 = -1.4917404615387262e+111;
        bool r23425 = r23423 <= r23424;
        double r23426 = 0.5;
        double r23427 = 2.0;
        double r23428 = -2.0;
        double r23429 = r23428 * r23423;
        double r23430 = r23427 * r23429;
        double r23431 = sqrt(r23430);
        double r23432 = r23426 * r23431;
        double r23433 = -3.528167954050154e-301;
        bool r23434 = r23423 <= r23433;
        double r23435 = r23423 * r23423;
        double r23436 = im;
        double r23437 = r23436 * r23436;
        double r23438 = r23435 + r23437;
        double r23439 = cbrt(r23438);
        double r23440 = r23439 * r23439;
        double r23441 = sqrt(r23440);
        double r23442 = sqrt(r23441);
        double r23443 = sqrt(r23439);
        double r23444 = sqrt(r23443);
        double r23445 = sqrt(r23438);
        double r23446 = sqrt(r23445);
        double r23447 = r23444 * r23446;
        double r23448 = r23442 * r23447;
        double r23449 = r23448 - r23423;
        double r23450 = r23427 * r23449;
        double r23451 = sqrt(r23450);
        double r23452 = r23426 * r23451;
        double r23453 = 2.0;
        double r23454 = pow(r23436, r23453);
        double r23455 = r23445 + r23423;
        double r23456 = r23454 / r23455;
        double r23457 = r23427 * r23456;
        double r23458 = sqrt(r23457);
        double r23459 = r23426 * r23458;
        double r23460 = r23434 ? r23452 : r23459;
        double r23461 = r23425 ? r23432 : r23460;
        return r23461;
}

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.4917404615387262e+111

    1. Initial program 53.9

      \[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.4917404615387262e+111 < re < -3.528167954050154e-301

    1. Initial program 20.7

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

      \[\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-prod20.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 add-cube-cbrt20.8

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\sqrt{\sqrt{\color{blue}{\left(\sqrt[3]{re \cdot re + im \cdot im} \cdot \sqrt[3]{re \cdot re + im \cdot im}\right) \cdot \sqrt[3]{re \cdot re + im \cdot im}}}} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im}} - re\right)}\]
    7. Applied sqrt-prod20.8

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\sqrt{\color{blue}{\sqrt{\sqrt[3]{re \cdot re + im \cdot im} \cdot \sqrt[3]{re \cdot re + im \cdot im}} \cdot \sqrt{\sqrt[3]{re \cdot re + im \cdot im}}}} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im}} - re\right)}\]
    8. Applied sqrt-prod20.9

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\color{blue}{\left(\sqrt{\sqrt{\sqrt[3]{re \cdot re + im \cdot im} \cdot \sqrt[3]{re \cdot re + im \cdot im}}} \cdot \sqrt{\sqrt{\sqrt[3]{re \cdot re + im \cdot im}}}\right)} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im}} - re\right)}\]
    9. Applied associate-*l*20.8

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

    if -3.528167954050154e-301 < re

    1. Initial program 46.0

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

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -1.491740461538726219683531543082814061521 \cdot 10^{111}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\ \mathbf{elif}\;re \le -3.528167954050153861894555232350182828574 \cdot 10^{-301}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{\sqrt{\sqrt[3]{re \cdot re + im \cdot im} \cdot \sqrt[3]{re \cdot re + im \cdot im}}} \cdot \left(\sqrt{\sqrt{\sqrt[3]{re \cdot re + im \cdot im}}} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im}}\right) - 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 2019308 
(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)))))