Average Error: 37.4 → 23.1
Time: 18.1s
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 -6.991664128554264 \cdot 10^{+84}:\\ \;\;\;\;0.5 \cdot \sqrt{-4.0 \cdot re}\\ \mathbf{elif}\;re \le -1.8535095195161492 \cdot 10^{-179}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(\sqrt{im \cdot im + re \cdot re} - re\right) \cdot 2.0}\\ \mathbf{elif}\;re \le 7.873406083661657 \cdot 10^{-245}:\\ \;\;\;\;\sqrt{\left(im - re\right) \cdot 2.0} \cdot 0.5\\ \mathbf{elif}\;re \le 5.042112965232755 \cdot 10^{+122}:\\ \;\;\;\;0.5 \cdot \sqrt{\frac{\left(im \cdot im\right) \cdot 2.0}{re + \sqrt{im \cdot im + re \cdot re}}}\\ \mathbf{else}:\\ \;\;\;\;\frac{\sqrt{\left(im \cdot im\right) \cdot 2.0}}{\sqrt{re + re}} \cdot 0.5\\ \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 -6.991664128554264 \cdot 10^{+84}:\\
\;\;\;\;0.5 \cdot \sqrt{-4.0 \cdot re}\\

\mathbf{elif}\;re \le -1.8535095195161492 \cdot 10^{-179}:\\
\;\;\;\;0.5 \cdot \sqrt{\left(\sqrt{im \cdot im + re \cdot re} - re\right) \cdot 2.0}\\

\mathbf{elif}\;re \le 7.873406083661657 \cdot 10^{-245}:\\
\;\;\;\;\sqrt{\left(im - re\right) \cdot 2.0} \cdot 0.5\\

\mathbf{elif}\;re \le 5.042112965232755 \cdot 10^{+122}:\\
\;\;\;\;0.5 \cdot \sqrt{\frac{\left(im \cdot im\right) \cdot 2.0}{re + \sqrt{im \cdot im + re \cdot re}}}\\

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

\end{array}
double f(double re, double im) {
        double r520143 = 0.5;
        double r520144 = 2.0;
        double r520145 = re;
        double r520146 = r520145 * r520145;
        double r520147 = im;
        double r520148 = r520147 * r520147;
        double r520149 = r520146 + r520148;
        double r520150 = sqrt(r520149);
        double r520151 = r520150 - r520145;
        double r520152 = r520144 * r520151;
        double r520153 = sqrt(r520152);
        double r520154 = r520143 * r520153;
        return r520154;
}

double f(double re, double im) {
        double r520155 = re;
        double r520156 = -6.991664128554264e+84;
        bool r520157 = r520155 <= r520156;
        double r520158 = 0.5;
        double r520159 = -4.0;
        double r520160 = r520159 * r520155;
        double r520161 = sqrt(r520160);
        double r520162 = r520158 * r520161;
        double r520163 = -1.8535095195161492e-179;
        bool r520164 = r520155 <= r520163;
        double r520165 = im;
        double r520166 = r520165 * r520165;
        double r520167 = r520155 * r520155;
        double r520168 = r520166 + r520167;
        double r520169 = sqrt(r520168);
        double r520170 = r520169 - r520155;
        double r520171 = 2.0;
        double r520172 = r520170 * r520171;
        double r520173 = sqrt(r520172);
        double r520174 = r520158 * r520173;
        double r520175 = 7.873406083661657e-245;
        bool r520176 = r520155 <= r520175;
        double r520177 = r520165 - r520155;
        double r520178 = r520177 * r520171;
        double r520179 = sqrt(r520178);
        double r520180 = r520179 * r520158;
        double r520181 = 5.042112965232755e+122;
        bool r520182 = r520155 <= r520181;
        double r520183 = r520166 * r520171;
        double r520184 = r520155 + r520169;
        double r520185 = r520183 / r520184;
        double r520186 = sqrt(r520185);
        double r520187 = r520158 * r520186;
        double r520188 = sqrt(r520183);
        double r520189 = r520155 + r520155;
        double r520190 = sqrt(r520189);
        double r520191 = r520188 / r520190;
        double r520192 = r520191 * r520158;
        double r520193 = r520182 ? r520187 : r520192;
        double r520194 = r520176 ? r520180 : r520193;
        double r520195 = r520164 ? r520174 : r520194;
        double r520196 = r520157 ? r520162 : r520195;
        return r520196;
}

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 5 regimes
  2. if re < -6.991664128554264e+84

    1. Initial program 47.2

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

      \[\leadsto 0.5 \cdot \sqrt{\color{blue}{-4.0 \cdot re}}\]

    if -6.991664128554264e+84 < re < -1.8535095195161492e-179

    1. Initial program 16.4

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

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

    if -1.8535095195161492e-179 < re < 7.873406083661657e-245

    1. Initial program 28.6

      \[0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\]
    2. Using strategy rm
    3. Applied *-commutative28.6

      \[\leadsto 0.5 \cdot \sqrt{\color{blue}{\left(\sqrt{re \cdot re + im \cdot im} - re\right) \cdot 2.0}}\]
    4. Taylor expanded around 0 32.7

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

    if 7.873406083661657e-245 < re < 5.042112965232755e+122

    1. Initial program 39.8

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

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

      \[\leadsto 0.5 \cdot \sqrt{\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}} \cdot 2.0}\]
    6. Applied associate-*l/39.8

      \[\leadsto 0.5 \cdot \sqrt{\color{blue}{\frac{\left(\sqrt{re \cdot re + im \cdot im} \cdot \sqrt{re \cdot re + im \cdot im} - re \cdot re\right) \cdot 2.0}{\sqrt{re \cdot re + im \cdot im} + re}}}\]
    7. Applied sqrt-div39.9

      \[\leadsto 0.5 \cdot \color{blue}{\frac{\sqrt{\left(\sqrt{re \cdot re + im \cdot im} \cdot \sqrt{re \cdot re + im \cdot im} - re \cdot re\right) \cdot 2.0}}{\sqrt{\sqrt{re \cdot re + im \cdot im} + re}}}\]
    8. Simplified30.0

      \[\leadsto 0.5 \cdot \frac{\color{blue}{\sqrt{2.0 \cdot \left(im \cdot im\right) + 0}}}{\sqrt{\sqrt{re \cdot re + im \cdot im} + re}}\]
    9. Using strategy rm
    10. Applied sqrt-undiv31.0

      \[\leadsto 0.5 \cdot \color{blue}{\sqrt{\frac{2.0 \cdot \left(im \cdot im\right) + 0}{\sqrt{re \cdot re + im \cdot im} + re}}}\]
    11. Simplified31.0

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

    if 5.042112965232755e+122 < re

    1. Initial program 60.2

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

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

      \[\leadsto 0.5 \cdot \sqrt{\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}} \cdot 2.0}\]
    6. Applied associate-*l/60.2

      \[\leadsto 0.5 \cdot \sqrt{\color{blue}{\frac{\left(\sqrt{re \cdot re + im \cdot im} \cdot \sqrt{re \cdot re + im \cdot im} - re \cdot re\right) \cdot 2.0}{\sqrt{re \cdot re + im \cdot im} + re}}}\]
    7. Applied sqrt-div60.2

      \[\leadsto 0.5 \cdot \color{blue}{\frac{\sqrt{\left(\sqrt{re \cdot re + im \cdot im} \cdot \sqrt{re \cdot re + im \cdot im} - re \cdot re\right) \cdot 2.0}}{\sqrt{\sqrt{re \cdot re + im \cdot im} + re}}}\]
    8. Simplified45.3

      \[\leadsto 0.5 \cdot \frac{\color{blue}{\sqrt{2.0 \cdot \left(im \cdot im\right) + 0}}}{\sqrt{\sqrt{re \cdot re + im \cdot im} + re}}\]
    9. Taylor expanded around inf 20.6

      \[\leadsto 0.5 \cdot \frac{\sqrt{2.0 \cdot \left(im \cdot im\right) + 0}}{\sqrt{\color{blue}{re} + re}}\]
  3. Recombined 5 regimes into one program.
  4. Final simplification23.1

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -6.991664128554264 \cdot 10^{+84}:\\ \;\;\;\;0.5 \cdot \sqrt{-4.0 \cdot re}\\ \mathbf{elif}\;re \le -1.8535095195161492 \cdot 10^{-179}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(\sqrt{im \cdot im + re \cdot re} - re\right) \cdot 2.0}\\ \mathbf{elif}\;re \le 7.873406083661657 \cdot 10^{-245}:\\ \;\;\;\;\sqrt{\left(im - re\right) \cdot 2.0} \cdot 0.5\\ \mathbf{elif}\;re \le 5.042112965232755 \cdot 10^{+122}:\\ \;\;\;\;0.5 \cdot \sqrt{\frac{\left(im \cdot im\right) \cdot 2.0}{re + \sqrt{im \cdot im + re \cdot re}}}\\ \mathbf{else}:\\ \;\;\;\;\frac{\sqrt{\left(im \cdot im\right) \cdot 2.0}}{\sqrt{re + re}} \cdot 0.5\\ \end{array}\]

Reproduce

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