Average Error: 38.4 → 22.3
Time: 5.0s
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.1561596166685901 \cdot 10^{125}:\\ \;\;\;\;0.5 \cdot \frac{\sqrt{2} \cdot \left|im\right|}{\sqrt{-1 \cdot re - re}}\\ \mathbf{elif}\;re \le -1.10443298905324865 \cdot 10^{-116}:\\ \;\;\;\;0.5 \cdot \left(\left(\sqrt{2} \cdot \left|im\right|\right) \cdot \frac{1}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\right)\\ \mathbf{elif}\;re \le 2.2168231547144052 \cdot 10^{-295}:\\ \;\;\;\;0.5 \cdot \frac{\sqrt{2} \cdot \left|im\right|}{\sqrt{im - re}}\\ \mathbf{elif}\;re \le 2.3062092194117723 \cdot 10^{-254}:\\ \;\;\;\;0.5 \cdot \frac{\frac{\sqrt{2}}{\frac{\left|\sqrt[3]{\sqrt{re \cdot re + im \cdot im} - re}\right|}{\left|im\right|}}}{\sqrt{\sqrt[3]{\sqrt{re \cdot re + im \cdot im} - re}}}\\ \mathbf{elif}\;re \le 6.78638117437622715 \cdot 10^{-92}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(re + im\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.1561596166685901 \cdot 10^{125}:\\
\;\;\;\;0.5 \cdot \frac{\sqrt{2} \cdot \left|im\right|}{\sqrt{-1 \cdot re - re}}\\

\mathbf{elif}\;re \le -1.10443298905324865 \cdot 10^{-116}:\\
\;\;\;\;0.5 \cdot \left(\left(\sqrt{2} \cdot \left|im\right|\right) \cdot \frac{1}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\right)\\

\mathbf{elif}\;re \le 2.2168231547144052 \cdot 10^{-295}:\\
\;\;\;\;0.5 \cdot \frac{\sqrt{2} \cdot \left|im\right|}{\sqrt{im - re}}\\

\mathbf{elif}\;re \le 2.3062092194117723 \cdot 10^{-254}:\\
\;\;\;\;0.5 \cdot \frac{\frac{\sqrt{2}}{\frac{\left|\sqrt[3]{\sqrt{re \cdot re + im \cdot im} - re}\right|}{\left|im\right|}}}{\sqrt{\sqrt[3]{\sqrt{re \cdot re + im \cdot im} - re}}}\\

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

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

\end{array}
double f(double re, double im) {
        double r336995 = 0.5;
        double r336996 = 2.0;
        double r336997 = re;
        double r336998 = r336997 * r336997;
        double r336999 = im;
        double r337000 = r336999 * r336999;
        double r337001 = r336998 + r337000;
        double r337002 = sqrt(r337001);
        double r337003 = r337002 + r336997;
        double r337004 = r336996 * r337003;
        double r337005 = sqrt(r337004);
        double r337006 = r336995 * r337005;
        return r337006;
}

double f(double re, double im) {
        double r337007 = re;
        double r337008 = -8.15615961666859e+125;
        bool r337009 = r337007 <= r337008;
        double r337010 = 0.5;
        double r337011 = 2.0;
        double r337012 = sqrt(r337011);
        double r337013 = im;
        double r337014 = fabs(r337013);
        double r337015 = r337012 * r337014;
        double r337016 = -1.0;
        double r337017 = r337016 * r337007;
        double r337018 = r337017 - r337007;
        double r337019 = sqrt(r337018);
        double r337020 = r337015 / r337019;
        double r337021 = r337010 * r337020;
        double r337022 = -1.1044329890532487e-116;
        bool r337023 = r337007 <= r337022;
        double r337024 = 1.0;
        double r337025 = r337007 * r337007;
        double r337026 = r337013 * r337013;
        double r337027 = r337025 + r337026;
        double r337028 = sqrt(r337027);
        double r337029 = r337028 - r337007;
        double r337030 = sqrt(r337029);
        double r337031 = r337024 / r337030;
        double r337032 = r337015 * r337031;
        double r337033 = r337010 * r337032;
        double r337034 = 2.216823154714405e-295;
        bool r337035 = r337007 <= r337034;
        double r337036 = r337013 - r337007;
        double r337037 = sqrt(r337036);
        double r337038 = r337015 / r337037;
        double r337039 = r337010 * r337038;
        double r337040 = 2.3062092194117723e-254;
        bool r337041 = r337007 <= r337040;
        double r337042 = cbrt(r337029);
        double r337043 = fabs(r337042);
        double r337044 = r337043 / r337014;
        double r337045 = r337012 / r337044;
        double r337046 = sqrt(r337042);
        double r337047 = r337045 / r337046;
        double r337048 = r337010 * r337047;
        double r337049 = 6.786381174376227e-92;
        bool r337050 = r337007 <= r337049;
        double r337051 = r337007 + r337013;
        double r337052 = r337011 * r337051;
        double r337053 = sqrt(r337052);
        double r337054 = r337010 * r337053;
        double r337055 = 2.0;
        double r337056 = r337055 * r337007;
        double r337057 = r337011 * r337056;
        double r337058 = sqrt(r337057);
        double r337059 = r337010 * r337058;
        double r337060 = r337050 ? r337054 : r337059;
        double r337061 = r337041 ? r337048 : r337060;
        double r337062 = r337035 ? r337039 : r337061;
        double r337063 = r337023 ? r337033 : r337062;
        double r337064 = r337009 ? r337021 : r337063;
        return r337064;
}

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.4
Target33.2
Herbie22.3
\[\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 re < -8.15615961666859e+125

    1. Initial program 61.9

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

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

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \frac{\color{blue}{{im}^{2}}}{\sqrt{re \cdot re + im \cdot im} - re}}\]
    5. Using strategy rm
    6. Applied associate-*r/46.9

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

      \[\leadsto 0.5 \cdot \color{blue}{\frac{\sqrt{2 \cdot {im}^{2}}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}}\]
    8. Using strategy rm
    9. Applied sqrt-prod45.7

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

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

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

    if -8.15615961666859e+125 < re < -1.1044329890532487e-116

    1. Initial program 45.6

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

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \frac{\color{blue}{{im}^{2}}}{\sqrt{re \cdot re + im \cdot im} - re}}\]
    5. Using strategy rm
    6. Applied associate-*r/30.8

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

      \[\leadsto 0.5 \cdot \color{blue}{\frac{\sqrt{2 \cdot {im}^{2}}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}}\]
    8. Using strategy rm
    9. Applied sqrt-prod29.2

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

      \[\leadsto 0.5 \cdot \frac{\sqrt{2} \cdot \color{blue}{\left|im\right|}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\]
    11. Using strategy rm
    12. Applied div-inv16.2

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

    if -1.1044329890532487e-116 < re < 2.216823154714405e-295

    1. Initial program 33.1

      \[0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}\]
    2. Using strategy rm
    3. Applied flip-+32.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. Simplified32.2

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \frac{\color{blue}{{im}^{2}}}{\sqrt{re \cdot re + im \cdot im} - re}}\]
    5. Using strategy rm
    6. Applied associate-*r/32.2

      \[\leadsto 0.5 \cdot \sqrt{\color{blue}{\frac{2 \cdot {im}^{2}}{\sqrt{re \cdot re + im \cdot im} - re}}}\]
    7. Applied sqrt-div32.4

      \[\leadsto 0.5 \cdot \color{blue}{\frac{\sqrt{2 \cdot {im}^{2}}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}}\]
    8. Using strategy rm
    9. Applied sqrt-prod32.4

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

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

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

    if 2.216823154714405e-295 < re < 2.3062092194117723e-254

    1. Initial program 29.0

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

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

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \frac{\color{blue}{{im}^{2}}}{\sqrt{re \cdot re + im \cdot im} - re}}\]
    5. Using strategy rm
    6. Applied associate-*r/29.9

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

      \[\leadsto 0.5 \cdot \color{blue}{\frac{\sqrt{2 \cdot {im}^{2}}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}}\]
    8. Using strategy rm
    9. Applied sqrt-prod30.7

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

      \[\leadsto 0.5 \cdot \frac{\sqrt{2} \cdot \color{blue}{\left|im\right|}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\]
    11. Using strategy rm
    12. Applied add-cube-cbrt30.5

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

      \[\leadsto 0.5 \cdot \frac{\sqrt{2} \cdot \left|im\right|}{\color{blue}{\sqrt{\sqrt[3]{\sqrt{re \cdot re + im \cdot im} - re} \cdot \sqrt[3]{\sqrt{re \cdot re + im \cdot im} - re}} \cdot \sqrt{\sqrt[3]{\sqrt{re \cdot re + im \cdot im} - re}}}}\]
    14. Applied associate-/r*30.6

      \[\leadsto 0.5 \cdot \color{blue}{\frac{\frac{\sqrt{2} \cdot \left|im\right|}{\sqrt{\sqrt[3]{\sqrt{re \cdot re + im \cdot im} - re} \cdot \sqrt[3]{\sqrt{re \cdot re + im \cdot im} - re}}}}{\sqrt{\sqrt[3]{\sqrt{re \cdot re + im \cdot im} - re}}}}\]
    15. Simplified30.6

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

    if 2.3062092194117723e-254 < re < 6.786381174376227e-92

    1. Initial program 23.5

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

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

    if 6.786381174376227e-92 < re

    1. Initial program 33.4

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

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

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \frac{\color{blue}{{im}^{2}}}{\sqrt{re \cdot re + im \cdot im} - re}}\]
    5. Taylor expanded around 0 18.7

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -8.1561596166685901 \cdot 10^{125}:\\ \;\;\;\;0.5 \cdot \frac{\sqrt{2} \cdot \left|im\right|}{\sqrt{-1 \cdot re - re}}\\ \mathbf{elif}\;re \le -1.10443298905324865 \cdot 10^{-116}:\\ \;\;\;\;0.5 \cdot \left(\left(\sqrt{2} \cdot \left|im\right|\right) \cdot \frac{1}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\right)\\ \mathbf{elif}\;re \le 2.2168231547144052 \cdot 10^{-295}:\\ \;\;\;\;0.5 \cdot \frac{\sqrt{2} \cdot \left|im\right|}{\sqrt{im - re}}\\ \mathbf{elif}\;re \le 2.3062092194117723 \cdot 10^{-254}:\\ \;\;\;\;0.5 \cdot \frac{\frac{\sqrt{2}}{\frac{\left|\sqrt[3]{\sqrt{re \cdot re + im \cdot im} - re}\right|}{\left|im\right|}}}{\sqrt{\sqrt[3]{\sqrt{re \cdot re + im \cdot im} - re}}}\\ \mathbf{elif}\;re \le 6.78638117437622715 \cdot 10^{-92}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(re + im\right)}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(2 \cdot re\right)}\\ \end{array}\]

Reproduce

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