Average Error: 37.5 → 30.3
Time: 15.9s
Precision: 64
\[0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\]
\[\begin{array}{l} \mathbf{if}\;re \le -3.106642014201959 \cdot 10^{+51}:\\ \;\;\;\;\sqrt{\left(-2 \cdot re\right) \cdot 2.0} \cdot 0.5\\ \mathbf{elif}\;re \le -9.302531496239792 \cdot 10^{-250}:\\ \;\;\;\;\sqrt{2.0 \cdot \left(\sqrt{\sqrt{im \cdot im + re \cdot re}} \cdot \sqrt{\sqrt{im \cdot im + re \cdot re}} - re\right)} \cdot 0.5\\ \mathbf{elif}\;re \le 7.096848204143166 \cdot 10^{-276}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(im - re\right)}\\ \mathbf{elif}\;re \le 5.548034001702293 \cdot 10^{-37}:\\ \;\;\;\;\sqrt{2.0 \cdot \left(\sqrt{\sqrt{im \cdot im + re \cdot re}} \cdot \sqrt{\sqrt{im \cdot im + re \cdot re}} - re\right)} \cdot 0.5\\ \mathbf{elif}\;re \le 3.0967242758656016 \cdot 10^{+173}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(im - re\right)}\\ \mathbf{else}:\\ \;\;\;\;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}\;re \le -3.106642014201959 \cdot 10^{+51}:\\
\;\;\;\;\sqrt{\left(-2 \cdot re\right) \cdot 2.0} \cdot 0.5\\

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

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

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

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

\mathbf{else}:\\
\;\;\;\;0\\

\end{array}
double f(double re, double im) {
        double r449319 = 0.5;
        double r449320 = 2.0;
        double r449321 = re;
        double r449322 = r449321 * r449321;
        double r449323 = im;
        double r449324 = r449323 * r449323;
        double r449325 = r449322 + r449324;
        double r449326 = sqrt(r449325);
        double r449327 = r449326 - r449321;
        double r449328 = r449320 * r449327;
        double r449329 = sqrt(r449328);
        double r449330 = r449319 * r449329;
        return r449330;
}

double f(double re, double im) {
        double r449331 = re;
        double r449332 = -3.106642014201959e+51;
        bool r449333 = r449331 <= r449332;
        double r449334 = -2.0;
        double r449335 = r449334 * r449331;
        double r449336 = 2.0;
        double r449337 = r449335 * r449336;
        double r449338 = sqrt(r449337);
        double r449339 = 0.5;
        double r449340 = r449338 * r449339;
        double r449341 = -9.302531496239792e-250;
        bool r449342 = r449331 <= r449341;
        double r449343 = im;
        double r449344 = r449343 * r449343;
        double r449345 = r449331 * r449331;
        double r449346 = r449344 + r449345;
        double r449347 = sqrt(r449346);
        double r449348 = sqrt(r449347);
        double r449349 = r449348 * r449348;
        double r449350 = r449349 - r449331;
        double r449351 = r449336 * r449350;
        double r449352 = sqrt(r449351);
        double r449353 = r449352 * r449339;
        double r449354 = 7.096848204143166e-276;
        bool r449355 = r449331 <= r449354;
        double r449356 = r449343 - r449331;
        double r449357 = r449336 * r449356;
        double r449358 = sqrt(r449357);
        double r449359 = r449339 * r449358;
        double r449360 = 5.548034001702293e-37;
        bool r449361 = r449331 <= r449360;
        double r449362 = 3.0967242758656016e+173;
        bool r449363 = r449331 <= r449362;
        double r449364 = 0.0;
        double r449365 = r449363 ? r449359 : r449364;
        double r449366 = r449361 ? r449353 : r449365;
        double r449367 = r449355 ? r449359 : r449366;
        double r449368 = r449342 ? r449353 : r449367;
        double r449369 = r449333 ? r449340 : r449368;
        return r449369;
}

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 < -3.106642014201959e+51

    1. Initial program 42.6

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

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

    if -3.106642014201959e+51 < re < -9.302531496239792e-250 or 7.096848204143166e-276 < re < 5.548034001702293e-37

    1. Initial program 25.4

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

      \[\leadsto 0.5 \cdot \sqrt{2.0 \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-prod25.5

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

    if -9.302531496239792e-250 < re < 7.096848204143166e-276 or 5.548034001702293e-37 < re < 3.0967242758656016e+173

    1. Initial program 44.1

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

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

    if 3.0967242758656016e+173 < re

    1. Initial program 62.3

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

      \[\leadsto 0.5 \cdot \color{blue}{0}\]
  3. Recombined 4 regimes into one program.
  4. Final simplification30.3

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -3.106642014201959 \cdot 10^{+51}:\\ \;\;\;\;\sqrt{\left(-2 \cdot re\right) \cdot 2.0} \cdot 0.5\\ \mathbf{elif}\;re \le -9.302531496239792 \cdot 10^{-250}:\\ \;\;\;\;\sqrt{2.0 \cdot \left(\sqrt{\sqrt{im \cdot im + re \cdot re}} \cdot \sqrt{\sqrt{im \cdot im + re \cdot re}} - re\right)} \cdot 0.5\\ \mathbf{elif}\;re \le 7.096848204143166 \cdot 10^{-276}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(im - re\right)}\\ \mathbf{elif}\;re \le 5.548034001702293 \cdot 10^{-37}:\\ \;\;\;\;\sqrt{2.0 \cdot \left(\sqrt{\sqrt{im \cdot im + re \cdot re}} \cdot \sqrt{\sqrt{im \cdot im + re \cdot re}} - re\right)} \cdot 0.5\\ \mathbf{elif}\;re \le 3.0967242758656016 \cdot 10^{+173}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(im - re\right)}\\ \mathbf{else}:\\ \;\;\;\;0\\ \end{array}\]

Reproduce

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