Average Error: 32.5 → 17.9
Time: 896.0ms
Precision: 64
\[\sqrt{re \cdot re + im \cdot im}\]
\[\begin{array}{l} \mathbf{if}\;re \le -3.759129799435656048380758639203459110241 \cdot 10^{141}:\\ \;\;\;\;-1 \cdot re\\ \mathbf{elif}\;re \le 4.467681746519448501796220879996979165015 \cdot 10^{133}:\\ \;\;\;\;\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 -3.759129799435656048380758639203459110241 \cdot 10^{141}:\\
\;\;\;\;-1 \cdot re\\

\mathbf{elif}\;re \le 4.467681746519448501796220879996979165015 \cdot 10^{133}:\\
\;\;\;\;\sqrt{re \cdot re + im \cdot im}\\

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

\end{array}
double f(double re, double im) {
        double r54009 = re;
        double r54010 = r54009 * r54009;
        double r54011 = im;
        double r54012 = r54011 * r54011;
        double r54013 = r54010 + r54012;
        double r54014 = sqrt(r54013);
        return r54014;
}

double f(double re, double im) {
        double r54015 = re;
        double r54016 = -3.759129799435656e+141;
        bool r54017 = r54015 <= r54016;
        double r54018 = -1.0;
        double r54019 = r54018 * r54015;
        double r54020 = 4.4676817465194485e+133;
        bool r54021 = r54015 <= r54020;
        double r54022 = r54015 * r54015;
        double r54023 = im;
        double r54024 = r54023 * r54023;
        double r54025 = r54022 + r54024;
        double r54026 = sqrt(r54025);
        double r54027 = r54021 ? r54026 : r54015;
        double r54028 = r54017 ? r54019 : r54027;
        return r54028;
}

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 < -3.759129799435656e+141

    1. Initial program 61.4

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

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

    if -3.759129799435656e+141 < re < 4.4676817465194485e+133

    1. Initial program 21.7

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

    if 4.4676817465194485e+133 < re

    1. Initial program 58.2

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -3.759129799435656048380758639203459110241 \cdot 10^{141}:\\ \;\;\;\;-1 \cdot re\\ \mathbf{elif}\;re \le 4.467681746519448501796220879996979165015 \cdot 10^{133}:\\ \;\;\;\;\sqrt{re \cdot re + im \cdot im}\\ \mathbf{else}:\\ \;\;\;\;re\\ \end{array}\]

Reproduce

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