Average Error: 31.1 → 17.3
Time: 2.4s
Precision: 64
\[\sqrt{re \cdot re + im \cdot im}\]
\[\begin{array}{l} \mathbf{if}\;re \le -3.6980740601030615 \cdot 10^{63}:\\ \;\;\;\;-1 \cdot re\\ \mathbf{elif}\;re \le 9.1753737888878369 \cdot 10^{116}:\\ \;\;\;\;\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.6980740601030615 \cdot 10^{63}:\\
\;\;\;\;-1 \cdot re\\

\mathbf{elif}\;re \le 9.1753737888878369 \cdot 10^{116}:\\
\;\;\;\;\sqrt{re \cdot re + im \cdot im}\\

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

\end{array}
double f(double re, double im) {
        double r99955 = re;
        double r99956 = r99955 * r99955;
        double r99957 = im;
        double r99958 = r99957 * r99957;
        double r99959 = r99956 + r99958;
        double r99960 = sqrt(r99959);
        return r99960;
}

double f(double re, double im) {
        double r99961 = re;
        double r99962 = -3.6980740601030615e+63;
        bool r99963 = r99961 <= r99962;
        double r99964 = -1.0;
        double r99965 = r99964 * r99961;
        double r99966 = 9.175373788887837e+116;
        bool r99967 = r99961 <= r99966;
        double r99968 = r99961 * r99961;
        double r99969 = im;
        double r99970 = r99969 * r99969;
        double r99971 = r99968 + r99970;
        double r99972 = sqrt(r99971);
        double r99973 = r99967 ? r99972 : r99961;
        double r99974 = r99963 ? r99965 : r99973;
        return r99974;
}

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.6980740601030615e+63

    1. Initial program 46.0

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

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

    if -3.6980740601030615e+63 < re < 9.175373788887837e+116

    1. Initial program 20.9

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

    if 9.175373788887837e+116 < re

    1. Initial program 55.4

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -3.6980740601030615 \cdot 10^{63}:\\ \;\;\;\;-1 \cdot re\\ \mathbf{elif}\;re \le 9.1753737888878369 \cdot 10^{116}:\\ \;\;\;\;\sqrt{re \cdot re + im \cdot im}\\ \mathbf{else}:\\ \;\;\;\;re\\ \end{array}\]

Reproduce

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