Average Error: 37.6 → 22.6
Time: 12.0s
Precision: 64
\[0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}\]
\[\begin{array}{l} \mathbf{if}\;im \le -3.427084990917964108413212422566201425884 \cdot 10^{78}:\\ \;\;\;\;\sqrt{\left(re - im\right) \cdot 2} \cdot 0.5\\ \mathbf{elif}\;im \le -6.880635684369791890266505163497341664663 \cdot 10^{-159}:\\ \;\;\;\;\sqrt{2 \cdot \left(\sqrt[3]{\sqrt{re \cdot re + im \cdot im}} \cdot \left(\sqrt[3]{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt[3]{\sqrt{re \cdot re + im \cdot im}}\right) + re\right)} \cdot 0.5\\ \mathbf{elif}\;im \le 9.707826590282529498928144182059884326441 \cdot 10^{-159}:\\ \;\;\;\;\sqrt{2 \cdot \left(re \cdot 2\right)} \cdot 0.5\\ \mathbf{elif}\;im \le 1.186844868934467533231645340789520602325 \cdot 10^{-110}:\\ \;\;\;\;\frac{\sqrt{\left(im \cdot im\right) \cdot 2}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}} \cdot 0.5\\ \mathbf{elif}\;im \le 8.35344993113947417274173199718646800664 \cdot 10^{-93}:\\ \;\;\;\;\sqrt{2 \cdot \left(re \cdot 2\right)} \cdot 0.5\\ \mathbf{elif}\;im \le 9.216308869239449327917900245724612540155 \cdot 10^{-10}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{im \cdot im}{\sqrt{re \cdot re + im \cdot im} - re}}\\ \mathbf{else}:\\ \;\;\;\;\sqrt{2 \cdot \left(re + im\right)} \cdot 0.5\\ \end{array}\]
0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}
\begin{array}{l}
\mathbf{if}\;im \le -3.427084990917964108413212422566201425884 \cdot 10^{78}:\\
\;\;\;\;\sqrt{\left(re - im\right) \cdot 2} \cdot 0.5\\

\mathbf{elif}\;im \le -6.880635684369791890266505163497341664663 \cdot 10^{-159}:\\
\;\;\;\;\sqrt{2 \cdot \left(\sqrt[3]{\sqrt{re \cdot re + im \cdot im}} \cdot \left(\sqrt[3]{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt[3]{\sqrt{re \cdot re + im \cdot im}}\right) + re\right)} \cdot 0.5\\

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

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

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

\mathbf{elif}\;im \le 9.216308869239449327917900245724612540155 \cdot 10^{-10}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{im \cdot im}{\sqrt{re \cdot re + im \cdot im} - re}}\\

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

\end{array}
double f(double re, double im) {
        double r83427 = 0.5;
        double r83428 = 2.0;
        double r83429 = re;
        double r83430 = r83429 * r83429;
        double r83431 = im;
        double r83432 = r83431 * r83431;
        double r83433 = r83430 + r83432;
        double r83434 = sqrt(r83433);
        double r83435 = r83434 + r83429;
        double r83436 = r83428 * r83435;
        double r83437 = sqrt(r83436);
        double r83438 = r83427 * r83437;
        return r83438;
}

double f(double re, double im) {
        double r83439 = im;
        double r83440 = -3.427084990917964e+78;
        bool r83441 = r83439 <= r83440;
        double r83442 = re;
        double r83443 = r83442 - r83439;
        double r83444 = 2.0;
        double r83445 = r83443 * r83444;
        double r83446 = sqrt(r83445);
        double r83447 = 0.5;
        double r83448 = r83446 * r83447;
        double r83449 = -6.880635684369792e-159;
        bool r83450 = r83439 <= r83449;
        double r83451 = r83442 * r83442;
        double r83452 = r83439 * r83439;
        double r83453 = r83451 + r83452;
        double r83454 = sqrt(r83453);
        double r83455 = cbrt(r83454);
        double r83456 = r83455 * r83455;
        double r83457 = r83455 * r83456;
        double r83458 = r83457 + r83442;
        double r83459 = r83444 * r83458;
        double r83460 = sqrt(r83459);
        double r83461 = r83460 * r83447;
        double r83462 = 9.70782659028253e-159;
        bool r83463 = r83439 <= r83462;
        double r83464 = 2.0;
        double r83465 = r83442 * r83464;
        double r83466 = r83444 * r83465;
        double r83467 = sqrt(r83466);
        double r83468 = r83467 * r83447;
        double r83469 = 1.1868448689344675e-110;
        bool r83470 = r83439 <= r83469;
        double r83471 = r83452 * r83444;
        double r83472 = sqrt(r83471);
        double r83473 = r83454 - r83442;
        double r83474 = sqrt(r83473);
        double r83475 = r83472 / r83474;
        double r83476 = r83475 * r83447;
        double r83477 = 8.353449931139474e-93;
        bool r83478 = r83439 <= r83477;
        double r83479 = 9.216308869239449e-10;
        bool r83480 = r83439 <= r83479;
        double r83481 = r83452 / r83473;
        double r83482 = r83444 * r83481;
        double r83483 = sqrt(r83482);
        double r83484 = r83447 * r83483;
        double r83485 = r83442 + r83439;
        double r83486 = r83444 * r83485;
        double r83487 = sqrt(r83486);
        double r83488 = r83487 * r83447;
        double r83489 = r83480 ? r83484 : r83488;
        double r83490 = r83478 ? r83468 : r83489;
        double r83491 = r83470 ? r83476 : r83490;
        double r83492 = r83463 ? r83468 : r83491;
        double r83493 = r83450 ? r83461 : r83492;
        double r83494 = r83441 ? r83448 : r83493;
        return r83494;
}

Error

Bits error versus re

Bits error versus im

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original37.6
Target32.7
Herbie22.6
\[\begin{array}{l} \mathbf{if}\;re \lt 0.0:\\ \;\;\;\;0.5 \cdot \left(\sqrt{2} \cdot \sqrt{\frac{im \cdot im}{\sqrt{re \cdot re + im \cdot im} - re}}\right)\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}\\ \end{array}\]

Derivation

  1. Split input into 6 regimes
  2. if im < -3.427084990917964e+78

    1. Initial program 47.4

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

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

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

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

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

    if -3.427084990917964e+78 < im < -6.880635684369792e-159

    1. Initial program 25.2

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

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

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

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

    if -6.880635684369792e-159 < im < 9.70782659028253e-159 or 1.1868448689344675e-110 < im < 8.353449931139474e-93

    1. Initial program 42.3

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

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

    if 9.70782659028253e-159 < im < 1.1868448689344675e-110

    1. Initial program 29.1

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

      \[\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. Applied associate-*r/43.5

      \[\leadsto 0.5 \cdot \sqrt{\color{blue}{\frac{2 \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-div43.6

      \[\leadsto 0.5 \cdot \color{blue}{\frac{\sqrt{2 \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. Simplified29.6

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

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

    if 8.353449931139474e-93 < im < 9.216308869239449e-10

    1. Initial program 24.0

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

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

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \frac{\color{blue}{im \cdot im + 0}}{\sqrt{re \cdot re + im \cdot im} - re}}\]
    5. Simplified25.1

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \frac{im \cdot im + 0}{\color{blue}{\sqrt{im \cdot im + re \cdot re} - re}}}\]

    if 9.216308869239449e-10 < im

    1. Initial program 39.8

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

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

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

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\left(\sqrt[3]{\sqrt{im \cdot im + re \cdot re}} \cdot \sqrt[3]{\sqrt{im \cdot im + re \cdot re}}\right) \cdot \color{blue}{\sqrt[3]{\sqrt{im \cdot im + re \cdot re}}} + re\right)}\]
    6. Taylor expanded around inf 15.0

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;im \le -3.427084990917964108413212422566201425884 \cdot 10^{78}:\\ \;\;\;\;\sqrt{\left(re - im\right) \cdot 2} \cdot 0.5\\ \mathbf{elif}\;im \le -6.880635684369791890266505163497341664663 \cdot 10^{-159}:\\ \;\;\;\;\sqrt{2 \cdot \left(\sqrt[3]{\sqrt{re \cdot re + im \cdot im}} \cdot \left(\sqrt[3]{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt[3]{\sqrt{re \cdot re + im \cdot im}}\right) + re\right)} \cdot 0.5\\ \mathbf{elif}\;im \le 9.707826590282529498928144182059884326441 \cdot 10^{-159}:\\ \;\;\;\;\sqrt{2 \cdot \left(re \cdot 2\right)} \cdot 0.5\\ \mathbf{elif}\;im \le 1.186844868934467533231645340789520602325 \cdot 10^{-110}:\\ \;\;\;\;\frac{\sqrt{\left(im \cdot im\right) \cdot 2}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}} \cdot 0.5\\ \mathbf{elif}\;im \le 8.35344993113947417274173199718646800664 \cdot 10^{-93}:\\ \;\;\;\;\sqrt{2 \cdot \left(re \cdot 2\right)} \cdot 0.5\\ \mathbf{elif}\;im \le 9.216308869239449327917900245724612540155 \cdot 10^{-10}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{im \cdot im}{\sqrt{re \cdot re + im \cdot im} - re}}\\ \mathbf{else}:\\ \;\;\;\;\sqrt{2 \cdot \left(re + im\right)} \cdot 0.5\\ \end{array}\]

Reproduce

herbie shell --seed 2019194 
(FPCore (re im)
  :name "math.sqrt on complex, real part"

  :herbie-target
  (if (< re 0.0) (* 0.5 (* (sqrt 2.0) (sqrt (/ (* im im) (- (sqrt (+ (* re re) (* im im))) re))))) (* 0.5 (sqrt (* 2.0 (+ (sqrt (+ (* re re) (* im im))) re)))))

  (* 0.5 (sqrt (* 2.0 (+ (sqrt (+ (* re re) (* im im))) re)))))