Average Error: 31.7 → 17.8
Time: 3.7s
Precision: 64
\[\sqrt{re \cdot re + im \cdot im}\]
\[\begin{array}{l} \mathbf{if}\;re \le -1.178594449777199163791033377764152427439 \cdot 10^{109}:\\ \;\;\;\;-re\\ \mathbf{elif}\;re \le 1.876761322676858408683984671658326382422 \cdot 10^{119}:\\ \;\;\;\;\sqrt{re \cdot re + im \cdot im}\\ \mathbf{else}:\\ \;\;\;\;re\\ \end{array}\]
\sqrt{re \cdot re + im \cdot im}
\begin{array}{l}
\mathbf{if}\;re \le -1.178594449777199163791033377764152427439 \cdot 10^{109}:\\
\;\;\;\;-re\\

\mathbf{elif}\;re \le 1.876761322676858408683984671658326382422 \cdot 10^{119}:\\
\;\;\;\;\sqrt{re \cdot re + im \cdot im}\\

\mathbf{else}:\\
\;\;\;\;re\\

\end{array}
double f(double re, double im) {
        double r29868 = re;
        double r29869 = r29868 * r29868;
        double r29870 = im;
        double r29871 = r29870 * r29870;
        double r29872 = r29869 + r29871;
        double r29873 = sqrt(r29872);
        return r29873;
}

double f(double re, double im) {
        double r29874 = re;
        double r29875 = -1.1785944497771992e+109;
        bool r29876 = r29874 <= r29875;
        double r29877 = -r29874;
        double r29878 = 1.8767613226768584e+119;
        bool r29879 = r29874 <= r29878;
        double r29880 = r29874 * r29874;
        double r29881 = im;
        double r29882 = r29881 * r29881;
        double r29883 = r29880 + r29882;
        double r29884 = sqrt(r29883);
        double r29885 = r29879 ? r29884 : r29874;
        double r29886 = r29876 ? r29877 : r29885;
        return r29886;
}

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 < -1.1785944497771992e+109

    1. Initial program 54.3

      \[\sqrt{re \cdot re + im \cdot im}\]
    2. Taylor expanded around -inf 11.4

      \[\leadsto \color{blue}{-1 \cdot re}\]
    3. Simplified11.4

      \[\leadsto \color{blue}{-re}\]

    if -1.1785944497771992e+109 < re < 1.8767613226768584e+119

    1. Initial program 21.4

      \[\sqrt{re \cdot re + im \cdot im}\]

    if 1.8767613226768584e+119 < re

    1. Initial program 55.9

      \[\sqrt{re \cdot re + im \cdot im}\]
    2. Taylor expanded around inf 8.2

      \[\leadsto \color{blue}{re}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification17.8

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -1.178594449777199163791033377764152427439 \cdot 10^{109}:\\ \;\;\;\;-re\\ \mathbf{elif}\;re \le 1.876761322676858408683984671658326382422 \cdot 10^{119}:\\ \;\;\;\;\sqrt{re \cdot re + im \cdot im}\\ \mathbf{else}:\\ \;\;\;\;re\\ \end{array}\]

Reproduce

herbie shell --seed 2019235 
(FPCore (re im)
  :name "math.abs on complex"
  :precision binary64
  (sqrt (+ (* re re) (* im im))))