Average Error: 31.2 → 17.7
Time: 12.0s
Precision: 64
\[\sqrt{re \cdot re + im \cdot im}\]
\[\begin{array}{l} \mathbf{if}\;re \le -3.67861896250387831 \cdot 10^{116}:\\ \;\;\;\;-re\\ \mathbf{elif}\;re \le 5.04022683723403456 \cdot 10^{87}:\\ \;\;\;\;\sqrt{re \cdot re + im \cdot im}\\ \mathbf{else}:\\ \;\;\;\;{re}^{\left(-\sqrt[3]{-1}\right)}\\ \end{array}\]
\sqrt{re \cdot re + im \cdot im}
\begin{array}{l}
\mathbf{if}\;re \le -3.67861896250387831 \cdot 10^{116}:\\
\;\;\;\;-re\\

\mathbf{elif}\;re \le 5.04022683723403456 \cdot 10^{87}:\\
\;\;\;\;\sqrt{re \cdot re + im \cdot im}\\

\mathbf{else}:\\
\;\;\;\;{re}^{\left(-\sqrt[3]{-1}\right)}\\

\end{array}
double f(double re, double im) {
        double r48007 = re;
        double r48008 = r48007 * r48007;
        double r48009 = im;
        double r48010 = r48009 * r48009;
        double r48011 = r48008 + r48010;
        double r48012 = sqrt(r48011);
        return r48012;
}

double f(double re, double im) {
        double r48013 = re;
        double r48014 = -3.678618962503878e+116;
        bool r48015 = r48013 <= r48014;
        double r48016 = -r48013;
        double r48017 = 5.0402268372340346e+87;
        bool r48018 = r48013 <= r48017;
        double r48019 = r48013 * r48013;
        double r48020 = im;
        double r48021 = r48020 * r48020;
        double r48022 = r48019 + r48021;
        double r48023 = sqrt(r48022);
        double r48024 = -1.0;
        double r48025 = cbrt(r48024);
        double r48026 = -r48025;
        double r48027 = pow(r48013, r48026);
        double r48028 = r48018 ? r48023 : r48027;
        double r48029 = r48015 ? r48016 : r48028;
        return r48029;
}

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.678618962503878e+116

    1. Initial program 54.0

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

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

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

    if -3.678618962503878e+116 < re < 5.0402268372340346e+87

    1. Initial program 21.0

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

    if 5.0402268372340346e+87 < re

    1. Initial program 50.4

      \[\sqrt{re \cdot re + im \cdot im}\]
    2. Using strategy rm
    3. Applied add-exp-log51.6

      \[\leadsto \color{blue}{e^{\log \left(\sqrt{re \cdot re + im \cdot im}\right)}}\]
    4. Using strategy rm
    5. Applied add-cube-cbrt52.1

      \[\leadsto e^{\color{blue}{\left(\sqrt[3]{\log \left(\sqrt{re \cdot re + im \cdot im}\right)} \cdot \sqrt[3]{\log \left(\sqrt{re \cdot re + im \cdot im}\right)}\right) \cdot \sqrt[3]{\log \left(\sqrt{re \cdot re + im \cdot im}\right)}}}\]
    6. Applied exp-prod52.1

      \[\leadsto \color{blue}{{\left(e^{\sqrt[3]{\log \left(\sqrt{re \cdot re + im \cdot im}\right)} \cdot \sqrt[3]{\log \left(\sqrt{re \cdot re + im \cdot im}\right)}}\right)}^{\left(\sqrt[3]{\log \left(\sqrt{re \cdot re + im \cdot im}\right)}\right)}}\]
    7. Taylor expanded around inf 64.0

      \[\leadsto \color{blue}{e^{\log \left(\frac{1}{re}\right) \cdot {-1}^{\frac{1}{3}}}}\]
    8. Simplified11.3

      \[\leadsto \color{blue}{{re}^{\left(-\sqrt[3]{-1}\right)}}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification17.7

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -3.67861896250387831 \cdot 10^{116}:\\ \;\;\;\;-re\\ \mathbf{elif}\;re \le 5.04022683723403456 \cdot 10^{87}:\\ \;\;\;\;\sqrt{re \cdot re + im \cdot im}\\ \mathbf{else}:\\ \;\;\;\;{re}^{\left(-\sqrt[3]{-1}\right)}\\ \end{array}\]

Reproduce

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