Average Error: 31.8 → 18.0
Time: 4.5s
Precision: 64
\[\sqrt{re \cdot re + im \cdot im}\]
\[\begin{array}{l} \mathbf{if}\;re \le -4.133795376408894095114882696362622107441 \cdot 10^{79}:\\ \;\;\;\;-re\\ \mathbf{elif}\;re \le 2.844559323175136428258475744554794771695 \cdot 10^{102}:\\ \;\;\;\;\sqrt{im \cdot im + re \cdot re}\\ \mathbf{else}:\\ \;\;\;\;re\\ \end{array}\]
\sqrt{re \cdot re + im \cdot im}
\begin{array}{l}
\mathbf{if}\;re \le -4.133795376408894095114882696362622107441 \cdot 10^{79}:\\
\;\;\;\;-re\\

\mathbf{elif}\;re \le 2.844559323175136428258475744554794771695 \cdot 10^{102}:\\
\;\;\;\;\sqrt{im \cdot im + re \cdot re}\\

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

\end{array}
double f(double re, double im) {
        double r1788655 = re;
        double r1788656 = r1788655 * r1788655;
        double r1788657 = im;
        double r1788658 = r1788657 * r1788657;
        double r1788659 = r1788656 + r1788658;
        double r1788660 = sqrt(r1788659);
        return r1788660;
}

double f(double re, double im) {
        double r1788661 = re;
        double r1788662 = -4.133795376408894e+79;
        bool r1788663 = r1788661 <= r1788662;
        double r1788664 = -r1788661;
        double r1788665 = 2.8445593231751364e+102;
        bool r1788666 = r1788661 <= r1788665;
        double r1788667 = im;
        double r1788668 = r1788667 * r1788667;
        double r1788669 = r1788661 * r1788661;
        double r1788670 = r1788668 + r1788669;
        double r1788671 = sqrt(r1788670);
        double r1788672 = r1788666 ? r1788671 : r1788661;
        double r1788673 = r1788663 ? r1788664 : r1788672;
        return r1788673;
}

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 < -4.133795376408894e+79

    1. Initial program 49.2

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

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

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

    if -4.133795376408894e+79 < re < 2.8445593231751364e+102

    1. Initial program 21.7

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

    if 2.8445593231751364e+102 < re

    1. Initial program 52.1

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -4.133795376408894095114882696362622107441 \cdot 10^{79}:\\ \;\;\;\;-re\\ \mathbf{elif}\;re \le 2.844559323175136428258475744554794771695 \cdot 10^{102}:\\ \;\;\;\;\sqrt{im \cdot im + re \cdot re}\\ \mathbf{else}:\\ \;\;\;\;re\\ \end{array}\]

Reproduce

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