Average Error: 31.1 → 17.6
Time: 2.6s
Precision: 64
\[\sqrt{re \cdot re + im \cdot im}\]
\[\begin{array}{l} \mathbf{if}\;re \le -7.17080433873193748647548036270335902417 \cdot 10^{152}:\\ \;\;\;\;-re\\ \mathbf{elif}\;re \le 371427111337525632:\\ \;\;\;\;\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 -7.17080433873193748647548036270335902417 \cdot 10^{152}:\\
\;\;\;\;-re\\

\mathbf{elif}\;re \le 371427111337525632:\\
\;\;\;\;\sqrt{re \cdot re + im \cdot im}\\

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

\end{array}
double f(double re, double im) {
        double r41586 = re;
        double r41587 = r41586 * r41586;
        double r41588 = im;
        double r41589 = r41588 * r41588;
        double r41590 = r41587 + r41589;
        double r41591 = sqrt(r41590);
        return r41591;
}

double f(double re, double im) {
        double r41592 = re;
        double r41593 = -7.1708043387319375e+152;
        bool r41594 = r41592 <= r41593;
        double r41595 = -r41592;
        double r41596 = 3.714271113375256e+17;
        bool r41597 = r41592 <= r41596;
        double r41598 = r41592 * r41592;
        double r41599 = im;
        double r41600 = r41599 * r41599;
        double r41601 = r41598 + r41600;
        double r41602 = sqrt(r41601);
        double r41603 = r41597 ? r41602 : r41592;
        double r41604 = r41594 ? r41595 : r41603;
        return r41604;
}

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 < -7.1708043387319375e+152

    1. Initial program 63.7

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

      \[\leadsto \color{blue}{-1 \cdot re}\]
    3. Simplified7.5

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

    if -7.1708043387319375e+152 < re < 3.714271113375256e+17

    1. Initial program 21.0

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

    if 3.714271113375256e+17 < re

    1. Initial program 41.2

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -7.17080433873193748647548036270335902417 \cdot 10^{152}:\\ \;\;\;\;-re\\ \mathbf{elif}\;re \le 371427111337525632:\\ \;\;\;\;\sqrt{re \cdot re + im \cdot im}\\ \mathbf{else}:\\ \;\;\;\;re\\ \end{array}\]

Reproduce

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