Average Error: 37.5 → 29.5
Time: 33.2s
Precision: 64
\[0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\]
\[\begin{array}{l} \mathbf{if}\;im \le -1.6803581184866765 \cdot 10^{+133}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(-2 \cdot re\right) \cdot 2.0}\\ \mathbf{elif}\;im \le -2.455921094632069 \cdot 10^{-131}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\\ \mathbf{elif}\;im \le -1.151501406023375 \cdot 10^{-301}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(-2 \cdot re\right) \cdot 2.0}\\ \mathbf{elif}\;im \le 6.443348859698863 \cdot 10^{-287}:\\ \;\;\;\;0.5 \cdot \frac{\sqrt{\left(im \cdot im\right) \cdot 2.0}}{\sqrt{re + \sqrt{re \cdot re + im \cdot im}}}\\ \mathbf{elif}\;im \le 3.7508469166234406 \cdot 10^{-167}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(-2 \cdot re\right) \cdot 2.0}\\ \mathbf{elif}\;im \le 3.111595179540434 \cdot 10^{+113}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(im - re\right) \cdot 2.0}\\ \end{array}\]
0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}
\begin{array}{l}
\mathbf{if}\;im \le -1.6803581184866765 \cdot 10^{+133}:\\
\;\;\;\;0.5 \cdot \sqrt{\left(-2 \cdot re\right) \cdot 2.0}\\

\mathbf{elif}\;im \le -2.455921094632069 \cdot 10^{-131}:\\
\;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\\

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

\mathbf{elif}\;im \le 6.443348859698863 \cdot 10^{-287}:\\
\;\;\;\;0.5 \cdot \frac{\sqrt{\left(im \cdot im\right) \cdot 2.0}}{\sqrt{re + \sqrt{re \cdot re + im \cdot im}}}\\

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

\mathbf{elif}\;im \le 3.111595179540434 \cdot 10^{+113}:\\
\;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\\

\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{\left(im - re\right) \cdot 2.0}\\

\end{array}
double f(double re, double im) {
        double r1316487 = 0.5;
        double r1316488 = 2.0;
        double r1316489 = re;
        double r1316490 = r1316489 * r1316489;
        double r1316491 = im;
        double r1316492 = r1316491 * r1316491;
        double r1316493 = r1316490 + r1316492;
        double r1316494 = sqrt(r1316493);
        double r1316495 = r1316494 - r1316489;
        double r1316496 = r1316488 * r1316495;
        double r1316497 = sqrt(r1316496);
        double r1316498 = r1316487 * r1316497;
        return r1316498;
}

double f(double re, double im) {
        double r1316499 = im;
        double r1316500 = -1.6803581184866765e+133;
        bool r1316501 = r1316499 <= r1316500;
        double r1316502 = 0.5;
        double r1316503 = -2.0;
        double r1316504 = re;
        double r1316505 = r1316503 * r1316504;
        double r1316506 = 2.0;
        double r1316507 = r1316505 * r1316506;
        double r1316508 = sqrt(r1316507);
        double r1316509 = r1316502 * r1316508;
        double r1316510 = -2.455921094632069e-131;
        bool r1316511 = r1316499 <= r1316510;
        double r1316512 = r1316504 * r1316504;
        double r1316513 = r1316499 * r1316499;
        double r1316514 = r1316512 + r1316513;
        double r1316515 = sqrt(r1316514);
        double r1316516 = r1316515 - r1316504;
        double r1316517 = r1316506 * r1316516;
        double r1316518 = sqrt(r1316517);
        double r1316519 = r1316502 * r1316518;
        double r1316520 = -1.151501406023375e-301;
        bool r1316521 = r1316499 <= r1316520;
        double r1316522 = 6.443348859698863e-287;
        bool r1316523 = r1316499 <= r1316522;
        double r1316524 = r1316513 * r1316506;
        double r1316525 = sqrt(r1316524);
        double r1316526 = r1316504 + r1316515;
        double r1316527 = sqrt(r1316526);
        double r1316528 = r1316525 / r1316527;
        double r1316529 = r1316502 * r1316528;
        double r1316530 = 3.7508469166234406e-167;
        bool r1316531 = r1316499 <= r1316530;
        double r1316532 = 3.111595179540434e+113;
        bool r1316533 = r1316499 <= r1316532;
        double r1316534 = r1316499 - r1316504;
        double r1316535 = r1316534 * r1316506;
        double r1316536 = sqrt(r1316535);
        double r1316537 = r1316502 * r1316536;
        double r1316538 = r1316533 ? r1316519 : r1316537;
        double r1316539 = r1316531 ? r1316509 : r1316538;
        double r1316540 = r1316523 ? r1316529 : r1316539;
        double r1316541 = r1316521 ? r1316509 : r1316540;
        double r1316542 = r1316511 ? r1316519 : r1316541;
        double r1316543 = r1316501 ? r1316509 : r1316542;
        return r1316543;
}

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 im < -1.6803581184866765e+133 or -2.455921094632069e-131 < im < -1.151501406023375e-301 or 6.443348859698863e-287 < im < 3.7508469166234406e-167

    1. Initial program 47.5

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

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

    if -1.6803581184866765e+133 < im < -2.455921094632069e-131 or 3.7508469166234406e-167 < im < 3.111595179540434e+113

    1. Initial program 23.8

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

    if -1.151501406023375e-301 < im < 6.443348859698863e-287

    1. Initial program 39.3

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

      \[\leadsto 0.5 \cdot \sqrt{2.0 \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/53.8

      \[\leadsto 0.5 \cdot \sqrt{\color{blue}{\frac{2.0 \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-div54.0

      \[\leadsto 0.5 \cdot \color{blue}{\frac{\sqrt{2.0 \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.0 \cdot \left(im \cdot im\right)}}}{\sqrt{\sqrt{re \cdot re + im \cdot im} + re}}\]

    if 3.111595179540434e+113 < im

    1. Initial program 51.6

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

      \[\leadsto 0.5 \cdot \sqrt{2.0 \cdot \color{blue}{\left(im - re\right)}}\]
  3. Recombined 4 regimes into one program.
  4. Final simplification29.5

    \[\leadsto \begin{array}{l} \mathbf{if}\;im \le -1.6803581184866765 \cdot 10^{+133}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(-2 \cdot re\right) \cdot 2.0}\\ \mathbf{elif}\;im \le -2.455921094632069 \cdot 10^{-131}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\\ \mathbf{elif}\;im \le -1.151501406023375 \cdot 10^{-301}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(-2 \cdot re\right) \cdot 2.0}\\ \mathbf{elif}\;im \le 6.443348859698863 \cdot 10^{-287}:\\ \;\;\;\;0.5 \cdot \frac{\sqrt{\left(im \cdot im\right) \cdot 2.0}}{\sqrt{re + \sqrt{re \cdot re + im \cdot im}}}\\ \mathbf{elif}\;im \le 3.7508469166234406 \cdot 10^{-167}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(-2 \cdot re\right) \cdot 2.0}\\ \mathbf{elif}\;im \le 3.111595179540434 \cdot 10^{+113}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(im - re\right) \cdot 2.0}\\ \end{array}\]

Reproduce

herbie shell --seed 2019121 
(FPCore (re im)
  :name "math.sqrt on complex, imaginary part, im greater than 0 branch"
  (* 0.5 (sqrt (* 2.0 (- (sqrt (+ (* re re) (* im im))) re)))))