Average Error: 32.1 → 17.8
Time: 1.7s
Precision: 64
\[\sqrt{re \cdot re + im \cdot im}\]
\[\begin{array}{l} \mathbf{if}\;im \le -5.11882901353521224 \cdot 10^{146}:\\ \;\;\;\;-1 \cdot im\\ \mathbf{elif}\;im \le 9.32078944865675832 \cdot 10^{57}:\\ \;\;\;\;\sqrt{re \cdot re + im \cdot im}\\ \mathbf{else}:\\ \;\;\;\;im\\ \end{array}\]
\sqrt{re \cdot re + im \cdot im}
\begin{array}{l}
\mathbf{if}\;im \le -5.11882901353521224 \cdot 10^{146}:\\
\;\;\;\;-1 \cdot im\\

\mathbf{elif}\;im \le 9.32078944865675832 \cdot 10^{57}:\\
\;\;\;\;\sqrt{re \cdot re + im \cdot im}\\

\mathbf{else}:\\
\;\;\;\;im\\

\end{array}
double f(double re, double im) {
        double r53108 = re;
        double r53109 = r53108 * r53108;
        double r53110 = im;
        double r53111 = r53110 * r53110;
        double r53112 = r53109 + r53111;
        double r53113 = sqrt(r53112);
        return r53113;
}

double f(double re, double im) {
        double r53114 = im;
        double r53115 = -5.118829013535212e+146;
        bool r53116 = r53114 <= r53115;
        double r53117 = -1.0;
        double r53118 = r53117 * r53114;
        double r53119 = 9.320789448656758e+57;
        bool r53120 = r53114 <= r53119;
        double r53121 = re;
        double r53122 = r53121 * r53121;
        double r53123 = r53114 * r53114;
        double r53124 = r53122 + r53123;
        double r53125 = sqrt(r53124);
        double r53126 = r53120 ? r53125 : r53114;
        double r53127 = r53116 ? r53118 : r53126;
        return r53127;
}

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 im < -5.118829013535212e+146

    1. Initial program 61.8

      \[\sqrt{re \cdot re + im \cdot im}\]
    2. Using strategy rm
    3. Applied flip-+64.0

      \[\leadsto \sqrt{\color{blue}{\frac{\left(re \cdot re\right) \cdot \left(re \cdot re\right) - \left(im \cdot im\right) \cdot \left(im \cdot im\right)}{re \cdot re - im \cdot im}}}\]
    4. Simplified64.0

      \[\leadsto \sqrt{\frac{\color{blue}{\left(-{im}^{3}\right) \cdot im + {re}^{4}}}{re \cdot re - im \cdot im}}\]
    5. Taylor expanded around -inf 7.7

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

    if -5.118829013535212e+146 < im < 9.320789448656758e+57

    1. Initial program 21.4

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

    if 9.320789448656758e+57 < im

    1. Initial program 46.5

      \[\sqrt{re \cdot re + im \cdot im}\]
    2. Taylor expanded around 0 13.0

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;im \le -5.11882901353521224 \cdot 10^{146}:\\ \;\;\;\;-1 \cdot im\\ \mathbf{elif}\;im \le 9.32078944865675832 \cdot 10^{57}:\\ \;\;\;\;\sqrt{re \cdot re + im \cdot im}\\ \mathbf{else}:\\ \;\;\;\;im\\ \end{array}\]

Reproduce

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