Average Error: 38.6 → 26.8
Time: 4.3s
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 -8.6798958381282374 \cdot 10^{-307}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{im \cdot im}{\sqrt{re \cdot re + im \cdot im} - re}}\\ \mathbf{elif}\;re \le 2.5975290754985087 \cdot 10^{85}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left(\sqrt{\left|\sqrt[3]{re \cdot re + im \cdot im}\right|} \cdot \sqrt{\sqrt[3]{\sqrt{re \cdot re + im \cdot im}}}\right) \cdot \left(\sqrt{\left|\sqrt[3]{re \cdot re + im \cdot im}\right|} \cdot \sqrt{\sqrt[3]{\sqrt{re \cdot re + im \cdot im}}}\right) + 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 -8.6798958381282374 \cdot 10^{-307}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{im \cdot im}{\sqrt{re \cdot re + im \cdot im} - re}}\\

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

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

\end{array}
double f(double re, double im) {
        double r175449 = 0.5;
        double r175450 = 2.0;
        double r175451 = re;
        double r175452 = r175451 * r175451;
        double r175453 = im;
        double r175454 = r175453 * r175453;
        double r175455 = r175452 + r175454;
        double r175456 = sqrt(r175455);
        double r175457 = r175456 + r175451;
        double r175458 = r175450 * r175457;
        double r175459 = sqrt(r175458);
        double r175460 = r175449 * r175459;
        return r175460;
}

double f(double re, double im) {
        double r175461 = re;
        double r175462 = -8.679895838128237e-307;
        bool r175463 = r175461 <= r175462;
        double r175464 = 0.5;
        double r175465 = 2.0;
        double r175466 = im;
        double r175467 = r175466 * r175466;
        double r175468 = r175461 * r175461;
        double r175469 = r175468 + r175467;
        double r175470 = sqrt(r175469);
        double r175471 = r175470 - r175461;
        double r175472 = r175467 / r175471;
        double r175473 = r175465 * r175472;
        double r175474 = sqrt(r175473);
        double r175475 = r175464 * r175474;
        double r175476 = 2.5975290754985087e+85;
        bool r175477 = r175461 <= r175476;
        double r175478 = cbrt(r175469);
        double r175479 = fabs(r175478);
        double r175480 = sqrt(r175479);
        double r175481 = cbrt(r175470);
        double r175482 = sqrt(r175481);
        double r175483 = r175480 * r175482;
        double r175484 = r175483 * r175483;
        double r175485 = r175484 + r175461;
        double r175486 = r175465 * r175485;
        double r175487 = sqrt(r175486);
        double r175488 = r175464 * r175487;
        double r175489 = 2.0;
        double r175490 = r175489 * r175461;
        double r175491 = r175465 * r175490;
        double r175492 = sqrt(r175491);
        double r175493 = r175464 * r175492;
        double r175494 = r175477 ? r175488 : r175493;
        double r175495 = r175463 ? r175475 : r175494;
        return r175495;
}

Error

Bits error versus re

Bits error versus im

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original38.6
Target33.7
Herbie26.8
\[\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 3 regimes
  2. if re < -8.679895838128237e-307

    1. Initial program 45.7

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

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

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

    if -8.679895838128237e-307 < re < 2.5975290754985087e+85

    1. Initial program 21.0

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

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

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

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\color{blue}{\left|\sqrt[3]{re \cdot re + im \cdot im}\right|} \cdot \sqrt{\sqrt[3]{re \cdot re + im \cdot im}} + re\right)}\]
    6. Using strategy rm
    7. Applied add-sqr-sqrt21.2

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\left|\sqrt[3]{re \cdot re + im \cdot im}\right| \cdot \sqrt{\sqrt[3]{\color{blue}{\sqrt{re \cdot re + im \cdot im} \cdot \sqrt{re \cdot re + im \cdot im}}}} + re\right)}\]
    8. Applied cbrt-prod21.2

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\left|\sqrt[3]{re \cdot re + im \cdot im}\right| \cdot \sqrt{\color{blue}{\sqrt[3]{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt[3]{\sqrt{re \cdot re + im \cdot im}}}} + re\right)}\]
    9. Applied sqrt-prod21.3

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\left|\sqrt[3]{re \cdot re + im \cdot im}\right| \cdot \color{blue}{\left(\sqrt{\sqrt[3]{\sqrt{re \cdot re + im \cdot im}}} \cdot \sqrt{\sqrt[3]{\sqrt{re \cdot re + im \cdot im}}}\right)} + re\right)}\]
    10. Applied add-sqr-sqrt21.3

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\color{blue}{\left(\sqrt{\left|\sqrt[3]{re \cdot re + im \cdot im}\right|} \cdot \sqrt{\left|\sqrt[3]{re \cdot re + im \cdot im}\right|}\right)} \cdot \left(\sqrt{\sqrt[3]{\sqrt{re \cdot re + im \cdot im}}} \cdot \sqrt{\sqrt[3]{\sqrt{re \cdot re + im \cdot im}}}\right) + re\right)}\]
    11. Applied unswap-sqr21.3

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

    if 2.5975290754985087e+85 < re

    1. Initial program 50.0

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -8.6798958381282374 \cdot 10^{-307}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{im \cdot im}{\sqrt{re \cdot re + im \cdot im} - re}}\\ \mathbf{elif}\;re \le 2.5975290754985087 \cdot 10^{85}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left(\sqrt{\left|\sqrt[3]{re \cdot re + im \cdot im}\right|} \cdot \sqrt{\sqrt[3]{\sqrt{re \cdot re + im \cdot im}}}\right) \cdot \left(\sqrt{\left|\sqrt[3]{re \cdot re + im \cdot im}\right|} \cdot \sqrt{\sqrt[3]{\sqrt{re \cdot re + im \cdot im}}}\right) + re\right)}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(2 \cdot re\right)}\\ \end{array}\]

Reproduce

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