Average Error: 38.9 → 24.1
Time: 17.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 -1.347179798748403963307828143348853532465 \cdot 10^{154}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{im \cdot im}{-2 \cdot re}}\\ \mathbf{elif}\;re \le 2.697027979067210685579027899322932915421 \cdot 10^{-241}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(\frac{im}{\sqrt{\sqrt[3]{\sqrt{im \cdot im + re \cdot re}} \cdot \left(\sqrt[3]{\sqrt{im \cdot im + re \cdot re}} \cdot \sqrt[3]{\sqrt{im \cdot im + re \cdot re}}\right) - re}} \cdot \frac{im}{\sqrt{\sqrt{im \cdot im + re \cdot re} - re}}\right) \cdot 2}\\ \mathbf{elif}\;re \le 1.472855835931036976191508699782905431485 \cdot 10^{93}:\\ \;\;\;\;\sqrt{2 \cdot \left(re + \sqrt{e^{\log \left(im \cdot im + re \cdot re\right)}}\right)} \cdot 0.5\\ \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 -1.347179798748403963307828143348853532465 \cdot 10^{154}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{im \cdot im}{-2 \cdot re}}\\

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

\mathbf{elif}\;re \le 1.472855835931036976191508699782905431485 \cdot 10^{93}:\\
\;\;\;\;\sqrt{2 \cdot \left(re + \sqrt{e^{\log \left(im \cdot im + re \cdot re\right)}}\right)} \cdot 0.5\\

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

\end{array}
double f(double re, double im) {
        double r6821309 = 0.5;
        double r6821310 = 2.0;
        double r6821311 = re;
        double r6821312 = r6821311 * r6821311;
        double r6821313 = im;
        double r6821314 = r6821313 * r6821313;
        double r6821315 = r6821312 + r6821314;
        double r6821316 = sqrt(r6821315);
        double r6821317 = r6821316 + r6821311;
        double r6821318 = r6821310 * r6821317;
        double r6821319 = sqrt(r6821318);
        double r6821320 = r6821309 * r6821319;
        return r6821320;
}

double f(double re, double im) {
        double r6821321 = re;
        double r6821322 = -1.347179798748404e+154;
        bool r6821323 = r6821321 <= r6821322;
        double r6821324 = 0.5;
        double r6821325 = 2.0;
        double r6821326 = im;
        double r6821327 = r6821326 * r6821326;
        double r6821328 = -2.0;
        double r6821329 = r6821328 * r6821321;
        double r6821330 = r6821327 / r6821329;
        double r6821331 = r6821325 * r6821330;
        double r6821332 = sqrt(r6821331);
        double r6821333 = r6821324 * r6821332;
        double r6821334 = 2.6970279790672107e-241;
        bool r6821335 = r6821321 <= r6821334;
        double r6821336 = r6821321 * r6821321;
        double r6821337 = r6821327 + r6821336;
        double r6821338 = sqrt(r6821337);
        double r6821339 = cbrt(r6821338);
        double r6821340 = r6821339 * r6821339;
        double r6821341 = r6821339 * r6821340;
        double r6821342 = r6821341 - r6821321;
        double r6821343 = sqrt(r6821342);
        double r6821344 = r6821326 / r6821343;
        double r6821345 = r6821338 - r6821321;
        double r6821346 = sqrt(r6821345);
        double r6821347 = r6821326 / r6821346;
        double r6821348 = r6821344 * r6821347;
        double r6821349 = r6821348 * r6821325;
        double r6821350 = sqrt(r6821349);
        double r6821351 = r6821324 * r6821350;
        double r6821352 = 1.472855835931037e+93;
        bool r6821353 = r6821321 <= r6821352;
        double r6821354 = log(r6821337);
        double r6821355 = exp(r6821354);
        double r6821356 = sqrt(r6821355);
        double r6821357 = r6821321 + r6821356;
        double r6821358 = r6821325 * r6821357;
        double r6821359 = sqrt(r6821358);
        double r6821360 = r6821359 * r6821324;
        double r6821361 = r6821321 + r6821321;
        double r6821362 = r6821325 * r6821361;
        double r6821363 = sqrt(r6821362);
        double r6821364 = r6821324 * r6821363;
        double r6821365 = r6821353 ? r6821360 : r6821364;
        double r6821366 = r6821335 ? r6821351 : r6821365;
        double r6821367 = r6821323 ? r6821333 : r6821366;
        return r6821367;
}

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.9
Target33.7
Herbie24.1
\[\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 4 regimes
  2. if re < -1.347179798748404e+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 flip-+64.0

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

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

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

    if -1.347179798748404e+154 < re < 2.6970279790672107e-241

    1. Initial program 38.8

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

      \[\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 \cdot im}}{\sqrt{re \cdot re + im \cdot im} - re}}\]
    5. Using strategy rm
    6. Applied add-sqr-sqrt30.7

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

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \color{blue}{\left(\frac{im}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}} \cdot \frac{im}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\right)}}\]
    8. Using strategy rm
    9. Applied add-cube-cbrt29.1

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\frac{im}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}} \cdot \frac{im}{\sqrt{\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)}\]

    if 2.6970279790672107e-241 < re < 1.472855835931037e+93

    1. Initial program 19.5

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

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

    if 1.472855835931037e+93 < re

    1. Initial program 50.9

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -1.347179798748403963307828143348853532465 \cdot 10^{154}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{im \cdot im}{-2 \cdot re}}\\ \mathbf{elif}\;re \le 2.697027979067210685579027899322932915421 \cdot 10^{-241}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(\frac{im}{\sqrt{\sqrt[3]{\sqrt{im \cdot im + re \cdot re}} \cdot \left(\sqrt[3]{\sqrt{im \cdot im + re \cdot re}} \cdot \sqrt[3]{\sqrt{im \cdot im + re \cdot re}}\right) - re}} \cdot \frac{im}{\sqrt{\sqrt{im \cdot im + re \cdot re} - re}}\right) \cdot 2}\\ \mathbf{elif}\;re \le 1.472855835931036976191508699782905431485 \cdot 10^{93}:\\ \;\;\;\;\sqrt{2 \cdot \left(re + \sqrt{e^{\log \left(im \cdot im + re \cdot re\right)}}\right)} \cdot 0.5\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(re + re\right)}\\ \end{array}\]

Reproduce

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