Average Error: 37.4 → 22.8
Time: 18.3s
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 -3.5257173004906795 \cdot 10^{+59}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(-2.0\right) \cdot \left(re + im\right)}\\ \mathbf{elif}\;im \le -3.9560523477270614 \cdot 10^{-109}:\\ \;\;\;\;\sqrt{2.0 \cdot \frac{im \cdot im}{\sqrt{im \cdot im + re \cdot re} + re}} \cdot 0.5\\ \mathbf{elif}\;im \le 1.084097404357406 \cdot 10^{-150}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(-2 \cdot re\right)}\\ \mathbf{elif}\;im \le 116.86075407426041:\\ \;\;\;\;\sqrt{2.0 \cdot \frac{im \cdot im}{\sqrt{im \cdot im + re \cdot re} + re}} \cdot 0.5\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(im - re\right)}\\ \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 -3.5257173004906795 \cdot 10^{+59}:\\
\;\;\;\;0.5 \cdot \sqrt{\left(-2.0\right) \cdot \left(re + im\right)}\\

\mathbf{elif}\;im \le -3.9560523477270614 \cdot 10^{-109}:\\
\;\;\;\;\sqrt{2.0 \cdot \frac{im \cdot im}{\sqrt{im \cdot im + re \cdot re} + re}} \cdot 0.5\\

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

\mathbf{elif}\;im \le 116.86075407426041:\\
\;\;\;\;\sqrt{2.0 \cdot \frac{im \cdot im}{\sqrt{im \cdot im + re \cdot re} + re}} \cdot 0.5\\

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

\end{array}
double f(double re, double im) {
        double r622545 = 0.5;
        double r622546 = 2.0;
        double r622547 = re;
        double r622548 = r622547 * r622547;
        double r622549 = im;
        double r622550 = r622549 * r622549;
        double r622551 = r622548 + r622550;
        double r622552 = sqrt(r622551);
        double r622553 = r622552 - r622547;
        double r622554 = r622546 * r622553;
        double r622555 = sqrt(r622554);
        double r622556 = r622545 * r622555;
        return r622556;
}

double f(double re, double im) {
        double r622557 = im;
        double r622558 = -3.5257173004906795e+59;
        bool r622559 = r622557 <= r622558;
        double r622560 = 0.5;
        double r622561 = 2.0;
        double r622562 = -r622561;
        double r622563 = re;
        double r622564 = r622563 + r622557;
        double r622565 = r622562 * r622564;
        double r622566 = sqrt(r622565);
        double r622567 = r622560 * r622566;
        double r622568 = -3.9560523477270614e-109;
        bool r622569 = r622557 <= r622568;
        double r622570 = r622557 * r622557;
        double r622571 = r622563 * r622563;
        double r622572 = r622570 + r622571;
        double r622573 = sqrt(r622572);
        double r622574 = r622573 + r622563;
        double r622575 = r622570 / r622574;
        double r622576 = r622561 * r622575;
        double r622577 = sqrt(r622576);
        double r622578 = r622577 * r622560;
        double r622579 = 1.084097404357406e-150;
        bool r622580 = r622557 <= r622579;
        double r622581 = -2.0;
        double r622582 = r622581 * r622563;
        double r622583 = r622561 * r622582;
        double r622584 = sqrt(r622583);
        double r622585 = r622560 * r622584;
        double r622586 = 116.86075407426041;
        bool r622587 = r622557 <= r622586;
        double r622588 = r622557 - r622563;
        double r622589 = r622561 * r622588;
        double r622590 = sqrt(r622589);
        double r622591 = r622560 * r622590;
        double r622592 = r622587 ? r622578 : r622591;
        double r622593 = r622580 ? r622585 : r622592;
        double r622594 = r622569 ? r622578 : r622593;
        double r622595 = r622559 ? r622567 : r622594;
        return r622595;
}

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 < -3.5257173004906795e+59

    1. Initial program 44.2

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

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

      \[\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)}\]
    5. Using strategy rm
    6. Applied sqrt-unprod44.2

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

      \[\leadsto 0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{\color{blue}{im \cdot im + re \cdot re}} - re\right)}\]
    8. Taylor expanded around -inf 11.2

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

    if -3.5257173004906795e+59 < im < -3.9560523477270614e-109 or 1.084097404357406e-150 < im < 116.86075407426041

    1. Initial program 24.9

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

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

      \[\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)}\]
    5. Using strategy rm
    6. Applied flip--33.5

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

      \[\leadsto 0.5 \cdot \sqrt{2.0 \cdot \frac{\color{blue}{im \cdot im}}{\sqrt{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im}} + re}}\]
    8. Simplified26.0

      \[\leadsto 0.5 \cdot \sqrt{2.0 \cdot \frac{im \cdot im}{\color{blue}{\sqrt{im \cdot im + re \cdot re} + re}}}\]

    if -3.9560523477270614e-109 < im < 1.084097404357406e-150

    1. Initial program 40.9

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

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

    if 116.86075407426041 < im

    1. Initial program 40.8

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

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

      \[\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)}\]
    5. Using strategy rm
    6. Applied sqrt-unprod40.8

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

      \[\leadsto 0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{\color{blue}{im \cdot im + re \cdot re}} - re\right)}\]
    8. Taylor expanded around inf 13.8

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;im \le -3.5257173004906795 \cdot 10^{+59}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(-2.0\right) \cdot \left(re + im\right)}\\ \mathbf{elif}\;im \le -3.9560523477270614 \cdot 10^{-109}:\\ \;\;\;\;\sqrt{2.0 \cdot \frac{im \cdot im}{\sqrt{im \cdot im + re \cdot re} + re}} \cdot 0.5\\ \mathbf{elif}\;im \le 1.084097404357406 \cdot 10^{-150}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(-2 \cdot re\right)}\\ \mathbf{elif}\;im \le 116.86075407426041:\\ \;\;\;\;\sqrt{2.0 \cdot \frac{im \cdot im}{\sqrt{im \cdot im + re \cdot re} + re}} \cdot 0.5\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(im - re\right)}\\ \end{array}\]

Reproduce

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