Average Error: 37.2 → 25.8
Time: 16.4s
Precision: 64
\[0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\]
\[\begin{array}{l} \mathbf{if}\;re \le -9.668087623085618 \cdot 10^{+77}:\\ \;\;\;\;\sqrt{\left(-2 \cdot re\right) \cdot 2.0} \cdot 0.5\\ \mathbf{elif}\;re \le -2.080739649117433 \cdot 10^{-307}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{\sqrt[3]{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt[3]{\sqrt{re \cdot re + im \cdot im}}} \cdot \sqrt{\sqrt[3]{re \cdot re + im \cdot im} \cdot \sqrt[3]{re \cdot re + im \cdot im}} - re\right)}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \frac{im \cdot im}{re + \sqrt{re \cdot re + im \cdot im}}}\\ \end{array}\]
0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}
\begin{array}{l}
\mathbf{if}\;re \le -9.668087623085618 \cdot 10^{+77}:\\
\;\;\;\;\sqrt{\left(-2 \cdot re\right) \cdot 2.0} \cdot 0.5\\

\mathbf{elif}\;re \le -2.080739649117433 \cdot 10^{-307}:\\
\;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{\sqrt[3]{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt[3]{\sqrt{re \cdot re + im \cdot im}}} \cdot \sqrt{\sqrt[3]{re \cdot re + im \cdot im} \cdot \sqrt[3]{re \cdot re + im \cdot im}} - re\right)}\\

\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \frac{im \cdot im}{re + \sqrt{re \cdot re + im \cdot im}}}\\

\end{array}
double f(double re, double im) {
        double r329058 = 0.5;
        double r329059 = 2.0;
        double r329060 = re;
        double r329061 = r329060 * r329060;
        double r329062 = im;
        double r329063 = r329062 * r329062;
        double r329064 = r329061 + r329063;
        double r329065 = sqrt(r329064);
        double r329066 = r329065 - r329060;
        double r329067 = r329059 * r329066;
        double r329068 = sqrt(r329067);
        double r329069 = r329058 * r329068;
        return r329069;
}

double f(double re, double im) {
        double r329070 = re;
        double r329071 = -9.668087623085618e+77;
        bool r329072 = r329070 <= r329071;
        double r329073 = -2.0;
        double r329074 = r329073 * r329070;
        double r329075 = 2.0;
        double r329076 = r329074 * r329075;
        double r329077 = sqrt(r329076);
        double r329078 = 0.5;
        double r329079 = r329077 * r329078;
        double r329080 = -2.080739649117433e-307;
        bool r329081 = r329070 <= r329080;
        double r329082 = r329070 * r329070;
        double r329083 = im;
        double r329084 = r329083 * r329083;
        double r329085 = r329082 + r329084;
        double r329086 = sqrt(r329085);
        double r329087 = cbrt(r329086);
        double r329088 = r329087 * r329087;
        double r329089 = sqrt(r329088);
        double r329090 = cbrt(r329085);
        double r329091 = r329090 * r329090;
        double r329092 = sqrt(r329091);
        double r329093 = r329089 * r329092;
        double r329094 = r329093 - r329070;
        double r329095 = r329075 * r329094;
        double r329096 = sqrt(r329095);
        double r329097 = r329078 * r329096;
        double r329098 = r329070 + r329086;
        double r329099 = r329084 / r329098;
        double r329100 = r329075 * r329099;
        double r329101 = sqrt(r329100);
        double r329102 = r329078 * r329101;
        double r329103 = r329081 ? r329097 : r329102;
        double r329104 = r329072 ? r329079 : r329103;
        return r329104;
}

Error

Bits error versus re

Bits error versus im

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Split input into 3 regimes
  2. if re < -9.668087623085618e+77

    1. Initial program 45.8

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

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

    if -9.668087623085618e+77 < re < -2.080739649117433e-307

    1. Initial program 20.1

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

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

      \[\leadsto 0.5 \cdot \sqrt{2.0 \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. Using strategy rm
    6. Applied add-sqr-sqrt20.4

      \[\leadsto 0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{\sqrt[3]{re \cdot re + im \cdot im} \cdot \sqrt[3]{re \cdot re + im \cdot im}} \cdot \sqrt{\sqrt[3]{\color{blue}{\sqrt{re \cdot re + im \cdot im} \cdot \sqrt{re \cdot re + im \cdot im}}}} - re\right)}\]
    7. Applied cbrt-prod20.4

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

    if -2.080739649117433e-307 < re

    1. Initial program 44.6

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

      \[\leadsto 0.5 \cdot \sqrt{2.0 \cdot \left(\color{blue}{\sqrt{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im}}} - re\right)}\]
    4. Using strategy rm
    5. Applied flip--45.0

      \[\leadsto 0.5 \cdot \sqrt{2.0 \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}}}\]
    6. Simplified35.0

      \[\leadsto 0.5 \cdot \sqrt{2.0 \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}}\]
    7. Simplified34.9

      \[\leadsto 0.5 \cdot \sqrt{2.0 \cdot \frac{0 + im \cdot im}{\color{blue}{\sqrt{re \cdot re + im \cdot im} + re}}}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification25.8

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

Reproduce

herbie shell --seed 2019152 
(FPCore (re im)
  :name "math.sqrt on complex, imaginary part, im greater than 0 branch"
  (* 0.5 (sqrt (* 2.0 (- (sqrt (+ (* re re) (* im im))) re)))))