Average Error: 39.2 → 18.6
Time: 5.6s
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 -8789989068572990460:\\ \;\;\;\;0.5 \cdot \left(\sqrt{2} \cdot \left|\frac{im}{\sqrt{-2 \cdot re}}\right|\right)\\ \mathbf{elif}\;re \le -2.41337729739384158 \cdot 10^{-231}:\\ \;\;\;\;0.5 \cdot \left(\sqrt{2} \cdot \left|\frac{im}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\right|\right)\\ \mathbf{elif}\;re \le 1.67371517749345966 \cdot 10^{-296}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im + re\right)}\\ \mathbf{elif}\;re \le 1.23466046513203641 \cdot 10^{-75}:\\ \;\;\;\;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{elif}\;re \le 1.3202809311828264 \cdot 10^{-48}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im + re\right)}\\ \mathbf{elif}\;re \le 4.50614919193534633 \cdot 10^{68}:\\ \;\;\;\;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(re + 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 -8789989068572990460:\\
\;\;\;\;0.5 \cdot \left(\sqrt{2} \cdot \left|\frac{im}{\sqrt{-2 \cdot re}}\right|\right)\\

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

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

\mathbf{elif}\;re \le 1.23466046513203641 \cdot 10^{-75}:\\
\;\;\;\;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{elif}\;re \le 1.3202809311828264 \cdot 10^{-48}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im + re\right)}\\

\mathbf{elif}\;re \le 4.50614919193534633 \cdot 10^{68}:\\
\;\;\;\;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(re + re\right)}\\

\end{array}
double f(double re, double im) {
        double r308233 = 0.5;
        double r308234 = 2.0;
        double r308235 = re;
        double r308236 = r308235 * r308235;
        double r308237 = im;
        double r308238 = r308237 * r308237;
        double r308239 = r308236 + r308238;
        double r308240 = sqrt(r308239);
        double r308241 = r308240 + r308235;
        double r308242 = r308234 * r308241;
        double r308243 = sqrt(r308242);
        double r308244 = r308233 * r308243;
        return r308244;
}

double f(double re, double im) {
        double r308245 = re;
        double r308246 = -8.78998906857299e+18;
        bool r308247 = r308245 <= r308246;
        double r308248 = 0.5;
        double r308249 = 2.0;
        double r308250 = sqrt(r308249);
        double r308251 = im;
        double r308252 = -2.0;
        double r308253 = r308252 * r308245;
        double r308254 = sqrt(r308253);
        double r308255 = r308251 / r308254;
        double r308256 = fabs(r308255);
        double r308257 = r308250 * r308256;
        double r308258 = r308248 * r308257;
        double r308259 = -2.4133772973938416e-231;
        bool r308260 = r308245 <= r308259;
        double r308261 = r308245 * r308245;
        double r308262 = r308251 * r308251;
        double r308263 = r308261 + r308262;
        double r308264 = sqrt(r308263);
        double r308265 = r308264 - r308245;
        double r308266 = sqrt(r308265);
        double r308267 = r308251 / r308266;
        double r308268 = fabs(r308267);
        double r308269 = r308250 * r308268;
        double r308270 = r308248 * r308269;
        double r308271 = 1.6737151774934597e-296;
        bool r308272 = r308245 <= r308271;
        double r308273 = r308251 + r308245;
        double r308274 = r308249 * r308273;
        double r308275 = sqrt(r308274);
        double r308276 = r308248 * r308275;
        double r308277 = 1.2346604651320364e-75;
        bool r308278 = r308245 <= r308277;
        double r308279 = sqrt(r308264);
        double r308280 = r308279 * r308279;
        double r308281 = r308280 + r308245;
        double r308282 = r308249 * r308281;
        double r308283 = sqrt(r308282);
        double r308284 = r308248 * r308283;
        double r308285 = 1.3202809311828264e-48;
        bool r308286 = r308245 <= r308285;
        double r308287 = 4.506149191935346e+68;
        bool r308288 = r308245 <= r308287;
        double r308289 = r308245 + r308245;
        double r308290 = r308249 * r308289;
        double r308291 = sqrt(r308290);
        double r308292 = r308248 * r308291;
        double r308293 = r308288 ? r308284 : r308292;
        double r308294 = r308286 ? r308276 : r308293;
        double r308295 = r308278 ? r308284 : r308294;
        double r308296 = r308272 ? r308276 : r308295;
        double r308297 = r308260 ? r308270 : r308296;
        double r308298 = r308247 ? r308258 : r308297;
        return r308298;
}

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.2
Target34.1
Herbie18.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 5 regimes
  2. if re < -8.78998906857299e+18

    1. Initial program 58.9

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

      \[\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 add-sqr-sqrt42.7

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

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \frac{{\color{blue}{\left(\sqrt{im} \cdot \sqrt{im}\right)}}^{2}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im} - re}}}\]
    8. Applied unpow-prod-down53.5

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

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

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\color{blue}{\frac{im}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}} \cdot \frac{{\left(\sqrt{im}\right)}^{2}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\right)}\]
    11. Simplified42.3

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\frac{im}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}} \cdot \color{blue}{\frac{im}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}}\right)}\]
    12. Using strategy rm
    13. Applied sqrt-prod42.3

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

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

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

    if -8.78998906857299e+18 < re < -2.4133772973938416e-231

    1. Initial program 36.8

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

      \[\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 add-sqr-sqrt30.6

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

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \frac{{\color{blue}{\left(\sqrt{im} \cdot \sqrt{im}\right)}}^{2}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im} - re}}}\]
    8. Applied unpow-prod-down48.1

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \frac{\color{blue}{{\left(\sqrt{im}\right)}^{2} \cdot {\left(\sqrt{im}\right)}^{2}}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im} - re}}}\]
    9. Applied times-frac46.4

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \color{blue}{\left(\frac{{\left(\sqrt{im}\right)}^{2}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}} \cdot \frac{{\left(\sqrt{im}\right)}^{2}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\right)}}\]
    10. Simplified46.4

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\color{blue}{\frac{im}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}} \cdot \frac{{\left(\sqrt{im}\right)}^{2}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\right)}\]
    11. Simplified27.5

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\frac{im}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}} \cdot \color{blue}{\frac{im}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}}\right)}\]
    12. Using strategy rm
    13. Applied sqrt-prod27.6

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

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

    if -2.4133772973938416e-231 < re < 1.6737151774934597e-296 or 1.2346604651320364e-75 < re < 1.3202809311828264e-48

    1. Initial program 28.4

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

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

    if 1.6737151774934597e-296 < re < 1.2346604651320364e-75 or 1.3202809311828264e-48 < re < 4.506149191935346e+68

    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 4.506149191935346e+68 < re

    1. Initial program 48.1

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -8789989068572990460:\\ \;\;\;\;0.5 \cdot \left(\sqrt{2} \cdot \left|\frac{im}{\sqrt{-2 \cdot re}}\right|\right)\\ \mathbf{elif}\;re \le -2.41337729739384158 \cdot 10^{-231}:\\ \;\;\;\;0.5 \cdot \left(\sqrt{2} \cdot \left|\frac{im}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\right|\right)\\ \mathbf{elif}\;re \le 1.67371517749345966 \cdot 10^{-296}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im + re\right)}\\ \mathbf{elif}\;re \le 1.23466046513203641 \cdot 10^{-75}:\\ \;\;\;\;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{elif}\;re \le 1.3202809311828264 \cdot 10^{-48}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im + re\right)}\\ \mathbf{elif}\;re \le 4.50614919193534633 \cdot 10^{68}:\\ \;\;\;\;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(re + re\right)}\\ \end{array}\]

Reproduce

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