Average Error: 39.1 → 22.9
Time: 9.2s
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.3657760091869803 \cdot 10^{154}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left|im\right| \cdot \frac{\left|im\right|}{-2 \cdot re}\right)}\\ \mathbf{elif}\;re \le -4.5405452937718227 \cdot 10^{-275}:\\ \;\;\;\;0.5 \cdot \frac{\sqrt{{im}^{2} \cdot 2}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\\ \mathbf{elif}\;re \le 1.27662858127337166 \cdot 10^{-281}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left|im\right| \cdot \frac{\left|im\right|}{im - re}\right)}\\ \mathbf{elif}\;re \le 1.5366724406791122 \cdot 10^{106}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im}} + re\right)}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(2 \cdot re\right)}\\ \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.3657760091869803 \cdot 10^{154}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left|im\right| \cdot \frac{\left|im\right|}{-2 \cdot re}\right)}\\

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

\mathbf{elif}\;re \le 1.27662858127337166 \cdot 10^{-281}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left|im\right| \cdot \frac{\left|im\right|}{im - re}\right)}\\

\mathbf{elif}\;re \le 1.5366724406791122 \cdot 10^{106}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im}} + re\right)}\\

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

\end{array}
double f(double re, double im) {
        double r181468 = 0.5;
        double r181469 = 2.0;
        double r181470 = re;
        double r181471 = r181470 * r181470;
        double r181472 = im;
        double r181473 = r181472 * r181472;
        double r181474 = r181471 + r181473;
        double r181475 = sqrt(r181474);
        double r181476 = r181475 + r181470;
        double r181477 = r181469 * r181476;
        double r181478 = sqrt(r181477);
        double r181479 = r181468 * r181478;
        return r181479;
}

double f(double re, double im) {
        double r181480 = re;
        double r181481 = -1.3657760091869803e+154;
        bool r181482 = r181480 <= r181481;
        double r181483 = 0.5;
        double r181484 = 2.0;
        double r181485 = im;
        double r181486 = fabs(r181485);
        double r181487 = -2.0;
        double r181488 = r181487 * r181480;
        double r181489 = r181486 / r181488;
        double r181490 = r181486 * r181489;
        double r181491 = r181484 * r181490;
        double r181492 = sqrt(r181491);
        double r181493 = r181483 * r181492;
        double r181494 = -4.540545293771823e-275;
        bool r181495 = r181480 <= r181494;
        double r181496 = 2.0;
        double r181497 = pow(r181485, r181496);
        double r181498 = r181497 * r181484;
        double r181499 = sqrt(r181498);
        double r181500 = r181480 * r181480;
        double r181501 = r181485 * r181485;
        double r181502 = r181500 + r181501;
        double r181503 = sqrt(r181502);
        double r181504 = r181503 - r181480;
        double r181505 = sqrt(r181504);
        double r181506 = r181499 / r181505;
        double r181507 = r181483 * r181506;
        double r181508 = 1.2766285812733717e-281;
        bool r181509 = r181480 <= r181508;
        double r181510 = r181485 - r181480;
        double r181511 = r181486 / r181510;
        double r181512 = r181486 * r181511;
        double r181513 = r181484 * r181512;
        double r181514 = sqrt(r181513);
        double r181515 = r181483 * r181514;
        double r181516 = 1.5366724406791122e+106;
        bool r181517 = r181480 <= r181516;
        double r181518 = sqrt(r181503);
        double r181519 = r181518 * r181518;
        double r181520 = r181519 + r181480;
        double r181521 = r181484 * r181520;
        double r181522 = sqrt(r181521);
        double r181523 = r181483 * r181522;
        double r181524 = r181496 * r181480;
        double r181525 = r181484 * r181524;
        double r181526 = sqrt(r181525);
        double r181527 = r181483 * r181526;
        double r181528 = r181517 ? r181523 : r181527;
        double r181529 = r181509 ? r181515 : r181528;
        double r181530 = r181495 ? r181507 : r181529;
        double r181531 = r181482 ? r181493 : r181530;
        return r181531;
}

Error

Bits error versus re

Bits error versus im

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original39.1
Target34.1
Herbie22.9
\[\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 5 regimes
  2. if re < -1.3657760091869803e+154

    1. Initial program 64.0

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

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

      \[\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 flip-+64.0

      \[\leadsto 0.5 \cdot \sqrt{2 \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. Simplified50.6

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

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \frac{0 + im \cdot im}{\color{blue}{\sqrt{re \cdot re + im \cdot im} - re}}}\]
    9. Using strategy rm
    10. Applied *-un-lft-identity50.6

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \frac{0 + im \cdot im}{\color{blue}{1 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}}}\]
    11. Applied add-sqr-sqrt50.6

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \frac{\color{blue}{\sqrt{0 + im \cdot im} \cdot \sqrt{0 + im \cdot im}}}{1 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}}\]
    12. Applied times-frac50.6

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

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

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\left|im\right| \cdot \color{blue}{\frac{\left|im\right|}{\sqrt{re \cdot re + im \cdot im} - re}}\right)}\]
    15. Taylor expanded around -inf 22.8

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

    if -1.3657760091869803e+154 < re < -4.540545293771823e-275

    1. Initial program 41.2

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

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

      \[\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 flip-+41.9

      \[\leadsto 0.5 \cdot \sqrt{2 \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. Simplified31.4

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

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \frac{0 + im \cdot im}{\color{blue}{\sqrt{re \cdot re + im \cdot im} - re}}}\]
    9. Using strategy rm
    10. Applied associate-*r/31.4

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

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

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

    if -4.540545293771823e-275 < re < 1.2766285812733717e-281

    1. Initial program 32.3

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

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

      \[\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 flip-+32.5

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

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

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \frac{0 + im \cdot im}{\color{blue}{\sqrt{re \cdot re + im \cdot im} - re}}}\]
    9. Using strategy rm
    10. Applied *-un-lft-identity32.4

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \frac{0 + im \cdot im}{\color{blue}{1 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}}}\]
    11. Applied add-sqr-sqrt32.4

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \frac{\color{blue}{\sqrt{0 + im \cdot im} \cdot \sqrt{0 + im \cdot im}}}{1 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}}\]
    12. Applied times-frac32.4

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

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

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\left|im\right| \cdot \color{blue}{\frac{\left|im\right|}{\sqrt{re \cdot re + im \cdot im} - re}}\right)}\]
    15. Taylor expanded around 0 33.4

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

    if 1.2766285812733717e-281 < re < 1.5366724406791122e+106

    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)}\]

    if 1.5366724406791122e+106 < re

    1. Initial program 52.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-sqrt52.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-prod52.7

      \[\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. Taylor expanded around inf 8.9

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -1.3657760091869803 \cdot 10^{154}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left|im\right| \cdot \frac{\left|im\right|}{-2 \cdot re}\right)}\\ \mathbf{elif}\;re \le -4.5405452937718227 \cdot 10^{-275}:\\ \;\;\;\;0.5 \cdot \frac{\sqrt{{im}^{2} \cdot 2}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\\ \mathbf{elif}\;re \le 1.27662858127337166 \cdot 10^{-281}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left|im\right| \cdot \frac{\left|im\right|}{im - re}\right)}\\ \mathbf{elif}\;re \le 1.5366724406791122 \cdot 10^{106}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im}} + re\right)}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(2 \cdot re\right)}\\ \end{array}\]

Reproduce

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

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

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